summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/fineff.cc
diff options
context:
space:
mode:
authorNeil Moore <neil@s-z.org>2012-09-09 20:25:53 -0400
committerNeil Moore <neil@s-z.org>2012-09-09 20:30:00 -0400
commitf64b91e62dafb06f0263a8241911f0126c2fc0e5 (patch)
treee74f295767b4eac246a94ed603c04dc7a6a812be /crawl-ref/source/fineff.cc
parent76e38f8501f8291f9a299b4c3906b01768fc6541 (diff)
downloadcrawl-ref-f64b91e62dafb06f0263a8241911f0126c2fc0e5.tar.gz
crawl-ref-f64b91e62dafb06f0263a8241911f0126c2fc0e5.zip
Fix a crash when fineffs trigger other fineffs.
Diffstat (limited to 'crawl-ref/source/fineff.cc')
-rw-r--r--crawl-ref/source/fineff.cc7
1 files changed, 5 insertions, 2 deletions
diff --git a/crawl-ref/source/fineff.cc b/crawl-ref/source/fineff.cc
index 8adda78424..4428bc8a5a 100644
--- a/crawl-ref/source/fineff.cc
+++ b/crawl-ref/source/fineff.cc
@@ -243,9 +243,12 @@ void blood_fineff::fire()
void fire_final_effects()
{
for (unsigned int i = 0; i < env.final_effects.size(); ++i)
- {
env.final_effects[i]->fire();
+
+ // Delete the allocated final_effects in a separate pass; otherwise,
+ // if one fineff schedules another, we would dereference a deleted object
+ // when checking mergeability in final_effect::schedule().
+ for (unsigned int i = 0; i < env.final_effects.size(); ++i)
delete env.final_effects[i];
- }
env.final_effects.clear();
}