Bennett Helm wrote:
> On Nov 29, 2006, at 12:36 PM, Peter Kümmel wrote:
>
>> OK, the patch has tested if theApp is valid, and it seems it is, but
>> it crashes anyway. So here a patch which tests if the reason for the
>> crash is the pure virtual function. It could be that is also does
>> not help, but I hope it does.
>
> Still crashes. Here's the new backtrace.
>
At least a more verbose backtrace.
> Assertion triggered in T* boost::scoped_ptr<T>::operator->() const [with
> T = lyx::frontend::Application] by failing check "ptr != 0" in file
> ../boost/boost/scoped_ptr.hpp:94
> Assertion triggered in T* boost::scoped_ptr<T>::operator->() const [with
> T = lyx::LyXServer] by failing check "ptr != 0" in file
> ../boost/boost/scoped_ptr.hpp:94
>
The first assert while calling quit the second one while
handling the assert (emergencyCleanup).
> Program received signal SIGABRT, Aborted.
> 0x9003d1dc in kill ()
> (gdb) bt
> #0 0x9003d1dc in kill ()
> #1 0x9010f2af in raise ()
> #2 0x9010de02 in abort ()
> #3 0x0010ec57 in lyx::support::abort () at abort.C:25
> #4 0x0006c110 in lyx::LyX::emergencyCleanup (this=0xbffff954) at
> ../boost/boost/scoped_ptr.hpp:94
> #5 0x0002798b in boost::emergencyCleanup () at boost.C:45
> #6 0x00027a55 in boost::assertion_failed (expr=0x5c2610 "ptr != 0",
> function=0x5d0918 "T* boost::scoped_ptr<T>::operator->() const [with T =
> lyx::frontend::Application]", file=0x5c25f0
> "../boost/boost/scoped_ptr.hpp", line=94) at boost.C:55
> #7 0x0006934a in lyx::LyX::quit (this=0xbffff954) at
> ../boost/boost/scoped_ptr.hpp:94
> #8 0x00069394 in lyx::LyX::~LyX (this=0xbffff954) at lyx_main.C:179
> #9 0x00003035 in main (argc=1, argv=0xbffff9e4) at main.C:48
>
> Bennett
>
Looks like quit is called twice or before anything is created,
but it's hard to say without a Mac.
What's the output with attached patch? (don't remove the last patch)
Hope you don't get annoyed by all these patching and compiling.
Peter
Index: src/lyx_main.C
===================================================================
--- src/lyx_main.C (Revision 16106)
+++ src/lyx_main.C (Arbeitskopie)
@@ -447,15 +447,31 @@
void LyX::quit()
{
+ static int i = 1;
+ printf("LyX::quit() called: %i\n", i);
+ i++;
lyxerr[Debug::INFO] << "Running QuitLyX." << endl;
+ printf("LyX::quit() 1\n");
prepareExit();
-
+ printf("LyX::quit() 2\n");
if (use_gui) {
- pimpl_->session_->writeFile();
+ if (pimpl_->session_)
+ {
+ pimpl_->session_->writeFile();
+ printf("LyX::quit() 3\n");
+ }
+ printf("LyX::quit() 4\n");
pimpl_->lyx_server_.reset();
+ printf("LyX::quit() 5\n");
pimpl_->lyx_socket_.reset();
- pimpl_->application_->exit(0);
+ printf("LyX::quit() 6\n");
+ if (pimpl_->application_)
+ {
+ pimpl_->application_->exit(0);
+ printf("LyX::quit() 7\n");
+ }
+ printf("LyX::quit() 8\n");
theApp = 0;
}
}
@@ -930,7 +946,8 @@
pimpl_->buffer_list_.emergencyWriteAll();
if (use_gui) {
- pimpl_->lyx_server_->emergencyCleanup();
+ if (pimpl_->lyx_server_)
+ pimpl_->lyx_server_->emergencyCleanup();
pimpl_->lyx_server_.reset();
pimpl_->lyx_socket_.reset();
}