From 05f73f0b98208ca4f7c026962c8ae00062644869 Mon Sep 17 00:00:00 2001 From: Jonas Kulla Date: Mon, 30 Sep 2013 19:30:05 +0200 Subject: [PATCH] Ensure Elements don't unlink from an already dead Scene --- src/scene.cpp | 14 +++++++++++++- src/scene.h | 2 +- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/scene.cpp b/src/scene.cpp index ef42bd4..b586507 100644 --- a/src/scene.cpp +++ b/src/scene.cpp @@ -30,6 +30,17 @@ Scene::Scene() geometry.rect = IntRect(); } +Scene::~Scene() +{ + /* Ensure elements don't unlink from a destructed Scene */ + IntruListLink *iter; + + for (iter = elements.begin(); iter != elements.end(); iter = iter->next) + { + iter->data->scene = 0; + } +} + void Scene::insert(SceneElement &element) { IntruListLink *iter; @@ -162,5 +173,6 @@ bool SceneElement::operator<(const SceneElement &o) const void SceneElement::unlink() { - scene->elements.remove(link); + if (scene) + scene->elements.remove(link); } diff --git a/src/scene.h b/src/scene.h index bbc9b2e..2913003 100644 --- a/src/scene.h +++ b/src/scene.h @@ -42,7 +42,7 @@ public: }; Scene(); - virtual ~Scene() {} + virtual ~Scene(); virtual void composite(); virtual void requestViewportRender(Vec4& /*color*/, Vec4& /*flash*/, Vec4& /*tone*/) {}