Subject: Crash when close old file Open /home/carlos/AnimaciĆ³n/donempinado-/synfig/Montaje.sifz It complains about some png and jpg missing and that's not the problem The file looks fine Close the file and ss-debug crash. ------------------------------------------------------------------------ backtrace: Program received signal SIGSEGV, Segmentation fault. [Switching to Thread 0x7ff0db2da780 (LWP 27987)] 0x000000000454a470 in ?? () (gdb) where #0 0x000000000454a470 in ?? () #1 0x0000000000705572 in handle (this=0x7fffe330f570, x=0x4549b10) at /home/carlos/Software/Synfig-git/install/include/ETL/_handle.h:175 #2 0x0000000000705593 in etl::loose_handle::operator etl::handle (this=0x81ae100) at /home/carlos/Software/Synfig-git/install/include/ETL/_handle.h:748 #3 0x00007ff0da7db025 in synfig::ValueBase::clear (this=0x81f9888) at value.cpp:255 #4 0x00007ff0da7db228 in ~ValueBase (this=0x81f9888) at value.cpp:98 #5 0x00007ff0da8703d6 in ~ValueNode_Const (this=0x81f9700) at valuenode_const.cpp:112 #6 0x00000000006e4699 in etl::shared_object::unref (this=0x81f9700) at /home/carlos/Software/Synfig-git/install/include/ETL/_handle.h:115 #7 0x00000000006fd6f3 in etl::handle::detach ( this=0x83ae908) at /home/carlos/Software/Synfig-git/install/include/ETL/_handle.h:240 #8 0x0000000000751178 in etl::rhandle::detach ( this=0x83ae908) at /home/carlos/Software/Synfig-git/install/include/ETL/_handle.h:553 #9 0x000000000075119e in ~rhandle (this=0x83ae908) at /home/carlos/Software/Synfig-git/install/include/ETL/_handle.h:466 #10 0x0000000000751456 in ~Waypoint (this=0x83ae8f0) at /home/carlos/Software/Synfig-git/install/include/synfig-0.0/synfig/waypoi---Type to continue, or q to quit--- nt.h:57 #11 0x00007ff0dae1b8a8 in std::_Destroy (__pointer=0x83ae8f0) at /usr/include/c++/4.3/bits/stl_construct.h:88 #12 0x00007ff0dae1b8c5 in std::_Destroy (__first=0x83ae8f0, __last=0x83aeab8) at /usr/include/c++/4.3/bits/stl_construct.h:103 #13 0x00007ff0dae1b8fa in std::_Destroy ( __first=0x83ae8f0, __last=0x83aeab8) at /usr/include/c++/4.3/bits/stl_construct.h:128 #14 0x00007ff0dae1d397 in ~vector (this=0x8398838) at /usr/include/c++/4.3/bits/stl_vector.h:300 #15 0x00007ff0da829e35 in ~ValueNode_Animated (this=0x83986b0) at valuenode_animated.cpp:1097 #16 0x00007ff0da833a4d in ~_Constant (this=0x83986b0) at valuenode_animated.cpp:536 #17 0x00000000006e4699 in etl::shared_object::unref (this=0x83986b0) at /home/carlos/Software/Synfig-git/install/include/ETL/_handle.h:115 #18 0x00000000006fd6f3 in etl::handle::detach ( this=0x81f9bd8) at /home/carlos/Software/Synfig-git/install/include/ETL/_handle.h:240 #19 0x0000000000751178 in etl::rhandle::detach ( this=0x81f9bd8) at /home/carlos/Software/Synfig-git/install/include/ETL/_handle.h:553 #20 0x000000000075119e in ~rhandle (this=0x81f9bd8) ---Type to continue, or q to quit--- ------------------------------------------------------------------------ dooglus, Sun Jan 4 18:21:26 CET 2009 Here's valgrind output: Invalid read of size 8 at 0x70556C: etl::handle::handle(synfig::Canvas*) (_handle.h:175) by 0x7055A2: etl::loose_handle::operator etl::handle() const (_handle.h:748) by 0x53F5244: synfig::ValueBase::clear() (value.cpp:255) by 0x53F5447: synfig::ValueBase::~ValueBase() (value.cpp:98) by 0x548ABE1: synfig::ValueNode_Const::~ValueNode_Const() (valuenode_const.cpp:112) by 0x6E46A8: etl::shared_object::unref() const (_handle.h:115) by 0x6FD702: etl::handle::detach() (_handle.h:240) by 0x751187: etl::rhandle::detach() (_handle.h:553) by 0x7511AD: etl::rhandle::~rhandle() (_handle.h:466) by 0x751465: synfig::Waypoint::~Waypoint() (waypoint.h:57) by 0x4FB7A6B: void std::_Destroy(synfig::Waypoint*) (stl_construct.h:88) by 0x4FB7A88: void std::_Destroy(synfig::Waypoint*, synfig::Waypoint*) (stl_construct.h:103) by 0x4FB7ABD: void std::_Destroy(synfig::Waypoint*, synfig::Waypoint*, ...) (stl_construct.h:128) by 0x4FB95D0: std::vector >::~vector() (stl_vector.h:300) by 0x5444054: synfig::ValueNode_Animated::~ValueNode_Animated() (valuenode_animated.cpp:1118) by 0x544DFD6: _Constant >::~_Constant() (valuenode_animated.cpp:536) by 0x6E46A8: etl::shared_object::unref() const (_handle.h:115) by 0x6FD702: etl::handle::detach() (_handle.h:240) by 0x751187: etl::rhandle::detach() (_handle.h:553) by 0x7511AD: etl::rhandle::~rhandle() (_handle.h:466) by 0x553B261: std::pair >::~pair() (stl_pair.h:73) by 0x5564068: std::map, ...>::erase(...) (stl_map.h:523) by 0x555F392: synfig::Layer::~Layer() (layer.cpp:166) by 0x5401F68: synfig::Layer_Composite::~Layer_Composite() (layer_composite.h:49) by 0x5412421: synfig::Layer_PasteCanvas::~Layer_PasteCanvas() (layer_pastecanvas.cpp:110) by 0x6E46A8: etl::shared_object::unref() const (_handle.h:115) by 0x6FD7C0: etl::handle::detach() (_handle.h:240) by 0x6FD7D8: etl::handle::~handle() (_handle.h:186) by 0x55283D0: synfig::Canvas::clear() (canvas.cpp:158) by 0x552BF7D: synfig::Canvas::~Canvas() (canvas.cpp:121) by 0x6E46A8: etl::shared_object::unref() const (_handle.h:115) by 0x6FD818: etl::handle::detach() (_handle.h:240) by 0x6FD830: etl::handle::~handle() (_handle.h:186) by 0x5001164: __gnu_cxx::new_allocator >::destroy(etl::handle*) (new_allocator.h:118) by 0x5001FDB: std::_List_base, std::allocator > >::_M_clear() (list.tcc:78) by 0x5002045: std::_List_base, std::allocator > >::~_List_base() (stl_list.h:358) by 0x50020A0: std::list, std::allocator > >::~list() (stl_list.h:417) by 0x552C636: synfig::Canvas::~Canvas() (canvas.cpp:123) by 0x6E46A8: etl::shared_object::unref() const (_handle.h:115) by 0x6FD818: etl::handle::detach() (_handle.h:240) by 0x6FD830: etl::handle::~handle() (_handle.h:186) by 0x8BFEFA: studio::WorkArea::~WorkArea() (workarea.cpp:833) by 0x7F49B7: std::auto_ptr::~auto_ptr() (auto_ptr.h:173) by 0x7E9934: studio::CanvasView::~CanvasView() (in /home/chris/programs/synfig/git/install/bin/synfigstudio) by 0x6E46A8: etl::shared_object::unref() const (_handle.h:115) by 0x6E7269: etl::handle::detach() (_handle.h:240) by 0x6E7280: etl::handle::~handle() (_handle.h:186) Address 0x17484b50 is 0 bytes inside a block of size 1,080 free'd at 0x4C24DAD: operator delete(void*) (vg_replace_malloc.c:342) by 0x552CB46: synfig::Canvas::~Canvas() (canvas.cpp:123) by 0x6E46A8: etl::shared_object::unref() const (_handle.h:115) by 0x6FD818: etl::handle::detach() (_handle.h:240) by 0x6FD830: etl::handle::~handle() (_handle.h:186) by 0x5001164: __gnu_cxx::new_allocator >::destroy(etl::handle*) (new_allocator.h:118) by 0x5001FDB: std::_List_base, std::allocator > >::_M_clear() (list.tcc:78) by 0x5002045: std::_List_base, std::allocator > >::~_List_base() (stl_list.h:358) by 0x50020A0: std::list, std::allocator > >::~list() (stl_list.h:417) by 0x552C636: synfig::Canvas::~Canvas() (canvas.cpp:123) by 0x6E46A8: etl::shared_object::unref() const (_handle.h:115) by 0x6FD818: etl::handle::detach() (_handle.h:240) by 0x6FD830: etl::handle::~handle() (_handle.h:186) by 0x5001164: __gnu_cxx::new_allocator >::destroy(etl::handle*) (new_allocator.h:118) by 0x5001FDB: std::_List_base, std::allocator > >::_M_clear() (list.tcc:78) by 0x5002045: std::_List_base, std::allocator > >::~_List_base() (stl_list.h:358) by 0x50020A0: std::list, std::allocator > >::~list() (stl_list.h:417) by 0x552C636: synfig::Canvas::~Canvas() (canvas.cpp:123) by 0x6E46A8: etl::shared_object::unref() const (_handle.h:115) by 0x6FD818: etl::handle::detach() (_handle.h:240) by 0x6FD830: etl::handle::~handle() (_handle.h:186) by 0x8BFEFA: studio::WorkArea::~WorkArea() (workarea.cpp:833) by 0x7F49B7: std::auto_ptr::~auto_ptr() (auto_ptr.h:173) by 0x7E9934: studio::CanvasView::~CanvasView() (in /home/chris/programs/synfig/git/install/bin/synfigstudio) by 0x6E46A8: etl::shared_object::unref() const (_handle.h:115) by 0x6E7269: etl::handle::detach() (_handle.h:240) by 0x6E7280: etl::handle::~handle() (_handle.h:186) by 0x86A1DF: studio::Instance::safe_close() (instance.cpp:709) by 0x77C2D5: studio::App::quit() (app.cpp:1776) ------------------------------------------------------------------------ dooglus, Sun Jan 4 20:42:52 CET 2009 Here's a simple .sifz file that causes the same crash: The bug always happened, it just didn't crash before. valgrind shows the same error in the svn version. It started showing up after the revision with commit message: "Define ref() and unref() as virtual so they can be overridden in derived classes." with this diff: ------------------------------------------------------------------------ --- a/ETL/trunk/ETL/_handle.h +++ b/ETL/trunk/ETL/_handle.h @@ -81,7 +81,7 @@ protected: #endif public: - void ref()const + virtual void ref()const { #ifdef ETL_LOCK_REFCOUNTS etl::mutex::lock lock(mtx); @@ -91,7 +91,7 @@ public: } //! Returns \c false if object needs to be deleted - bool unref()const + virtual bool unref()const { bool ret = true; { ------------------------------------------------------------------------ I've updated to the patch you proposed at the following git commit: 606daa09d274196be856a6f7a0fa35f934d00a7f and the crash has dissapeared. I don't see any "error: 1 canvas(es) not yet deleted!" message. ------------------------------------------------------------------------