Hey guys, Please note that this crash happens only to *top level window!* I've run the app that opens child windows, closing ( and thus deleting ) child windows/widgets does not result in crash.
Once when top level window is going to be deleted the crash will happen in Atk::~Implementor() On Tue, Nov 17, 2015 at 4:54 PM, Kjell Ahlstedt <[email protected] > wrote: > Yes, I've compiled with gcc. > > I tested with John's minimal test program. I used the gdb debugger and > stepped through much of the code that is executed from > Gtk::Window::~Window(). There is only one call to Glib::Refptr<>::~Refptr. > It destructs the Glib::RefPtr<Gtk::AccelGroup> accel_group_ member data in > Gtk::Window. pCppObject is nullptr, and therefore unreference() is not > called. That's the expected result. Atk::Implementor::~Implementor() is > called afterwards, and doesn't really do anything. > > The question now is: Why is pCppObject_->unreference() called in the > RefPtr destructor when gtkmm, > atkmm and glibmm are built with MSVC? Who sets pCppObject_ to something != > nullptr? Or isn't RefPtr's default constructor executed when the > Gtk::Window is created? > > Kjell > > Den 2015-11-17 kl. 13:47, skrev John Emmas: > > On 17/11/2015 11:31, John Emmas wrote: > > > template <class T_CppObject> inline > RefPtr<T_CppObject>::~RefPtr() > { > if(pCppObject_) > pCppObject_->unreference(); // This could cause pCppObject to be > deleted. > // ^ ^ ^ CRASH HAPPENS HERE > } > > and the above seems to get called during this 'destroy_()' call in > 'gtkmm/gtk/gtkmm/window.cc':- > > Window::~Window() > { > destroy_(); > } > > My guess would be that there is indeed some kind of double deletion > happening. I'll spend another hour or so on it and see if I can get any > further... > > > I didn't really get much further - except to realise that the crash > doesn't happen in that 'destroy_()' call - it actually happens after the > call (when 'Window' goes out of scope). So my gut feeling is that this > probably isn't a double deletion. Maybe 'pCppObject_->unreference()' is > getting called for an object that's already gone out of scope? Is that > even possible..? > > John > > >
_______________________________________________ gtkmm-list mailing list [email protected] https://mail.gnome.org/mailman/listinfo/gtkmm-list
