diff options
author | Neil Moore <neil@s-z.org> | 2012-09-09 20:25:53 -0400 |
---|---|---|
committer | Neil Moore <neil@s-z.org> | 2012-09-09 20:30:00 -0400 |
commit | f64b91e62dafb06f0263a8241911f0126c2fc0e5 (patch) | |
tree | e74f295767b4eac246a94ed603c04dc7a6a812be /crawl-ref/source/fineff.cc | |
parent | 76e38f8501f8291f9a299b4c3906b01768fc6541 (diff) | |
download | crawl-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.cc | 7 |
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(); } |