From: dooglus Date: Thu, 31 Jan 2008 23:43:38 +0000 (+0000) Subject: Fix a crash that was happening if we had 2 exported canvases in a .sif file where... X-Git-Url: https://git.pterodactylus.net/?a=commitdiff_plain;h=bec46bc8d42dab13851b47714c1095d8c8f9f9c3;p=synfig.git Fix a crash that was happening if we had 2 exported canvases in a .sif file where the 2nd contained a pastecanvas that used the 1st as its canvas. The canvases are destructed in the order in which they appear in the .sif file, so by the time the 2nd is destroyed, the pastecanvas it contains no longer has a valid canvas parameter. The fix is to clear the canvas parameter of any pastecanvases using a canvas when the canvas itself is destroyed. git-svn-id: http://svn.voria.com/code@1541 1f10aa63-cdf2-0310-b900-c93c546f37ac --- diff --git a/synfig-core/trunk/src/synfig/canvas.cpp b/synfig-core/trunk/src/synfig/canvas.cpp index fcf8935..c51507a 100644 --- a/synfig-core/trunk/src/synfig/canvas.cpp +++ b/synfig-core/trunk/src/synfig/canvas.cpp @@ -90,6 +90,19 @@ Canvas::on_changed() Canvas::~Canvas() { + // we were having a crash where pastecanvas layers were still + // refering to a canvas after it had been destroyed; this code + // will stop the pastecanvas layers from refering to the canvas + // before the canvas is destroyed + for (std::set::iterator iter = parent_set.begin(); iter != parent_set.end(); iter++) + { + Layer_PasteCanvas* paste_canvas = dynamic_cast(*iter); + if(paste_canvas) + paste_canvas->set_sub_canvas(0); + else + warning("destroyed canvas has a parent that is not a pastecanvas - please report if repeatable"); + } + //if(is_inline() && parent_) assert(0); _CanvasCounter::counter--; clear();