try to make a gui message when lyx crashes, don't crash again on windows (use exit()).

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@34056 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Peter Kümmel 2010-04-05 14:44:41 +00:00
parent a7734edf8e
commit c98745c081

View File

@ -611,21 +611,23 @@ static void error_handler(int err_sig)
// This shouldn't matter here, however, as we've already invoked
// emergencyCleanup.
docstring msg;
switch (err_sig) {
#ifdef SIGHUP
case SIGHUP:
lyxerr << "\nlyx: SIGHUP signal caught\nBye." << endl;
msg = _("SIGHUP signal caught!\nBye.");
break;
#endif
case SIGFPE:
lyxerr << "\nlyx: SIGFPE signal caught\nBye." << endl;
msg = _("SIGFPE signal caught!\nBye.");
break;
case SIGSEGV:
lyxerr << "\nlyx: SIGSEGV signal caught\n"
"Sorry, you have found a bug in LyX. "
msg = _("SIGSEGV signal caught!\n"
"Sorry, you have found a bug in LyX, "
"hope you have not lost any data.\n"
"Please read the bug-reporting instructions "
"in Help->Introduction and send us a bug report, "
"if necessary. Thanks !\nBye." << endl;
"in 'Help->Introduction' and send us a bug report, "
"if necessary. Thanks !\nBye.");
break;
case SIGINT:
case SIGTERM:
@ -633,6 +635,12 @@ static void error_handler(int err_sig)
break;
}
if (!msg.empty()) {
lyxerr << "\nlyx: " << msg << endl;
// try to make a GUI message
Alert::error(_("LyX crashed!"), msg);
}
// Deinstall the signal handlers
#ifdef SIGHUP
signal(SIGHUP, SIG_DFL);
@ -644,11 +652,18 @@ static void error_handler(int err_sig)
#ifdef SIGHUP
if (err_sig == SIGSEGV ||
(err_sig != SIGHUP && !getEnv("LYXDEBUG").empty()))
(err_sig != SIGHUP && !getEnv("LYXDEBUG").empty())) {
#else
if (err_sig == SIGSEGV || !getEnv("LYXDEBUG").empty()) {
#endif
#ifdef _MSC_VER
// with abort() it crashes again.
exit(err_sig);
#else
if (err_sig == SIGSEGV || !getEnv("LYXDEBUG").empty())
#endif
abort();
#endif
}
exit(0);
}