diff options
author | Darshan Shaligram <dshaligram@users.sourceforge.net> | 2010-06-24 02:51:16 +0530 |
---|---|---|
committer | Darshan Shaligram <dshaligram@users.sourceforge.net> | 2010-06-24 02:52:59 +0530 |
commit | efe8738d62f90394b72fd60bfc27af553053fc41 (patch) | |
tree | 7238e4bba4ad626b83716ff3f0e8a77e817a191c /crawl-ref/source/mapmark.cc | |
parent | cdcb7979c7123de926cd595e82ccd4403eeff1ca (diff) | |
download | crawl-ref-efe8738d62f90394b72fd60bfc27af553053fc41.tar.gz crawl-ref-efe8738d62f90394b72fd60bfc27af553053fc41.zip |
Fix crash when activating a marker causes it to remove itself from marker list (Mu).
Diffstat (limited to 'crawl-ref/source/mapmark.cc')
-rw-r--r-- | crawl-ref/source/mapmark.cc | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/crawl-ref/source/mapmark.cc b/crawl-ref/source/mapmark.cc index 51d4e43ded..bccec53e69 100644 --- a/crawl-ref/source/mapmark.cc +++ b/crawl-ref/source/mapmark.cc @@ -646,18 +646,22 @@ void map_markers::init_from(const map_markers &c) void map_markers::activate_all(bool verbose) { - std::vector<map_marker*> to_remove; - for (dgn_marker_map::iterator i = markers.begin(); - i != markers.end(); ++i) + i != markers.end(); ) { - i->second->activate(verbose); - if (i->second->property("post_activate_remove") != "") - to_remove.push_back(i->second); + map_marker *marker = i->second; + ++i; + marker->activate(verbose); } - for (unsigned int i = 0; i < to_remove.size(); i++) - remove(to_remove[i]); + for (dgn_marker_map::iterator i = markers.begin(); + i != markers.end(); ) + { + map_marker *marker = i->second; + ++i; + if (!marker->property("post_activate_remove").empty()) + remove(marker); + } } void map_markers::add(map_marker *marker) |