summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/mapmark.cc
diff options
context:
space:
mode:
authorDarshan Shaligram <dshaligram@users.sourceforge.net>2010-06-24 02:51:16 +0530
committerDarshan Shaligram <dshaligram@users.sourceforge.net>2010-06-24 02:52:59 +0530
commitefe8738d62f90394b72fd60bfc27af553053fc41 (patch)
tree7238e4bba4ad626b83716ff3f0e8a77e817a191c /crawl-ref/source/mapmark.cc
parentcdcb7979c7123de926cd595e82ccd4403eeff1ca (diff)
downloadcrawl-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.cc20
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)