Bennett Helm wrote: > On Nov 18, 2006, at 12:50 PM, Abdelrazak Younes wrote: > >> Georg Baum wrote: >>> Am Freitag, 17. November 2006 21:06 schrieb Peter Kümmel: >>>> Georg Baum wrote: >>>>> Peter Kümmel wrote: >>>>> >>>>>> My idea was to use some Loki code for singletons and global static >>> data. >>>>> I don't know Loki, so maybe I am missing something here, but I believe >>> that >>>>> we already have everything needed. >>>> Yes, we have C++. >>> What do you mean? I believe that Loki is a well designed library of >>> good quality, but I do not see the problem that it might solve for >>> us. Our problem is that some global static objects are destructed too >>> late, because they need other objects. This problem can be solved >>> IMHO by putting these objects into the LyX singleton, so I don't see >>> why we need any additional code. >> >> This is what I did. Hopefully, all crash-on-exit problems on windows >> and Mac should be solved now. > > Unfortunately, not. Quitting LyX on Mac gives: > > Program received signal EXC_BAD_ACCESS, Could not access memory. > Reason: KERN_PROTECTION_FAILURE at address: 0x00000040 > 0x0008e0a5 in lyx::LyXServerSocket::~LyXServerSocket (this=0xe3c15f0) at > lyxsocket.C:80 > 80 theApp->unregisterSocketCallback(fd_); > (gdb) bt > #0 0x0008e0a5 in lyx::LyXServerSocket::~LyXServerSocket > (this=0xe3c15f0) at lyxsocket.C:80 > #1 0x00664e9e in boost::checked_delete<lyx::LyXServerSocket> > (x=0xe3c15f0) at ../boost/boost/checked_delete.hpp:34 > #2 0x00065f61 in lyx::LyX::quit (this=0xbffff960) at lyx_main.C:418 > #3 0x00066006 in lyx::LyX::~LyX (this=0xbffff960) at lyx_main.C:176 > #4 0x00002995 in main (argc=1, argv=0xbffff9ec) at main.C:48 > > Bennett
void LyX::quit() { lyxerr[Debug::INFO] << "Running QuitLyX." << endl; prepareExit(); if (use_gui) { pimpl_->session_->writeFile(); pimpl_->lyx_server_.reset(); pimpl_->lyx_socket_.reset(); pimpl_->application_->exit(0); } } Could it be that pimpl_->lyx_socket_.reset() does not delete LyXServerSocket? Maybe when there is somewhere a copy of the smart pointer. Then after pimpl_->application_->exit(0) theApp is invalid. I check in a assert at ~LyXServerSocket. Peter