diff --git a/synfig-studio/src/gui/workarearenderer/renderer_canvas.cpp b/synfig-studio/src/gui/workarearenderer/renderer_canvas.cpp index ad18d74..76ab73b 100644 --- a/synfig-studio/src/gui/workarearenderer/renderer_canvas.cpp +++ b/synfig-studio/src/gui/workarearenderer/renderer_canvas.cpp @@ -294,7 +294,7 @@ Renderer_Canvas::insert_tile(TileList &list, const Tile::Handle &tile) tiles_size += image_rect_size(tile->rect); } -void +Renderer_Canvas::TileList::iterator Renderer_Canvas::erase_tile(TileList &list, TileList::iterator i, rendering::Task::List &events) { // this method may be called from other threads @@ -304,7 +304,7 @@ Renderer_Canvas::erase_tile(TileList &list, TileList::iterator i, rendering::Tas (*i)->event.reset(); (*i)->surface.reset(); (*i)->cairo_surface.clear(); - list.erase(i); + return list.erase(i); } void @@ -337,8 +337,8 @@ Renderer_Canvas::remove_extra_tiles(rendering::Task::List &events) // remove some extra tiles to free the memory for(WeightMap::reverse_iterator ri = sorted_frames.rbegin(); ri != sorted_frames.rend() && tiles_size > max_tiles_size_hard; ++ri) - for(TileList::iterator j = ri->second->second.begin(); j != ri->second->second.end() && tiles_size > max_tiles_size_hard; ) - erase_tile(ri->second->second, j++, events); + while(!ri->second->second.empty() && tiles_size > max_tiles_size_hard) + erase_tile(ri->second->second, ri->second->second.begin(), events); // remove empty entries from tiles map for(TileMap::iterator i = tiles.begin(); i != tiles.end(); ) @@ -644,7 +644,7 @@ Renderer_Canvas::clear_render() for(TileMap::iterator i = tiles.begin(); i != tiles.end(); ++i) while(!i->second.empty()) { TileList::iterator j = i->second.end(); --j; - erase_tile(i->second, j++, events); + erase_tile(i->second, j, events); } tiles.clear(); } diff --git a/synfig-studio/src/gui/workarearenderer/renderer_canvas.h b/synfig-studio/src/gui/workarearenderer/renderer_canvas.h index 2f06b31..d3e50bd 100644 --- a/synfig-studio/src/gui/workarearenderer/renderer_canvas.h +++ b/synfig-studio/src/gui/workarearenderer/renderer_canvas.h @@ -197,7 +197,7 @@ private: void insert_tile(TileList &list, const Tile::Handle &tile); //! mutex must be locked before call - void erase_tile(TileList &list, TileList::iterator i, synfig::rendering::Task::List &events); + TileList::iterator erase_tile(TileList &list, TileList::iterator i, synfig::rendering::Task::List &events); //! mutex must be locked before call void remove_extra_tiles(synfig::rendering::Task::List &events);