Change the order of the modules - magick++ is the last resort, other than the custom...
[synfig.git] / synfig-core / trunk / src / synfig / canvas.cpp
index c51507a..66d3d06 100644 (file)
@@ -94,9 +94,16 @@ Canvas::~Canvas()
        // 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<Node*>::iterator iter = parent_set.begin(); iter != parent_set.end(); iter++)
+
+       // the set_sub_canvas(0) ends up deleting the parent-child link,
+       // which deletes the current element from the set we're iterating
+       // through, so we have to make sure we've incremented the iterator
+       // before we mess with the pastecanvas
+       std::set<Node*>::iterator iter = parent_set.begin();
+       while (iter != parent_set.end())
        {
                Layer_PasteCanvas* paste_canvas = dynamic_cast<Layer_PasteCanvas*>(*iter);
+               iter++;
                if(paste_canvas)
                        paste_canvas->set_sub_canvas(0);
                else