diff options
author | Matthew Cline <zelgadis@sourceforge.net> | 2009-11-13 03:12:21 -0800 |
---|---|---|
committer | Matthew Cline <zelgadis@sourceforge.net> | 2009-11-13 03:12:21 -0800 |
commit | a228636066120596757c3d395fdb802ba107063f (patch) | |
tree | 5a523f9eea0ba72f7781e3151a840ec8721dd943 /crawl-ref/source/mapmark.cc | |
parent | ada5301a6dd6ba6d713a7aeb566d1ef14a000eb1 (diff) | |
download | crawl-ref-a228636066120596757c3d395fdb802ba107063f.tar.gz crawl-ref-a228636066120596757c3d395fdb802ba107063f.zip |
Don't remove marker while it's being activated
Removing a marker while it's being activated leads to memory weirdness,
so instead while activating all markers see if each marker has the
"post_activate_remove" set, and afterwards remove those that do.
Diffstat (limited to 'crawl-ref/source/mapmark.cc')
-rw-r--r-- | crawl-ref/source/mapmark.cc | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/crawl-ref/source/mapmark.cc b/crawl-ref/source/mapmark.cc index e7d3abf65a..b0f27d40b6 100644 --- a/crawl-ref/source/mapmark.cc +++ b/crawl-ref/source/mapmark.cc @@ -596,11 +596,18 @@ 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->second->activate(verbose); + if (i->second->property("post_activate_remove") != "") + to_remove.push_back(i->second); } + + for (unsigned int i = 0; i < to_remove.size(); i++) + remove(to_remove[i]); } void map_markers::add(map_marker *marker) |