From 417af815269ebb26ea9768fa69e970111a47224b Mon Sep 17 00:00:00 2001 From: Dan Winship Date: Wed, 14 Nov 2001 20:26:00 +0000 Subject: Instead of doing pthread_exit() after redirecting the SEGV, try to lock a * main.c (segv_redirect): Instead of doing pthread_exit() after redirecting the SEGV, try to lock a mutex we know is already locked. This will hopefully help debug a bunch of bugs where the crashed thread seems to be missing from the bug-buddy report. svn path=/trunk/; revision=14699 --- mail/main.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'mail/main.c') diff --git a/mail/main.c b/mail/main.c index af3bd93e7c..ef3f7f0ab4 100644 --- a/mail/main.c +++ b/mail/main.c @@ -62,6 +62,8 @@ static int blowup(int status) */ static void (*gnome_segv_handler) (int); +static GStaticMutex segv_mutex = G_STATIC_MUTEX_INIT; + static void segv_redirect (int sig) { @@ -69,7 +71,13 @@ segv_redirect (int sig) gnome_segv_handler (sig); else { pthread_kill (mail_gui_thread, sig); - pthread_exit (NULL); + /* We can't return from the signal handler or the + * thread may SEGV again. But we can't pthread_exit, + * because then the thread may get cleaned up before + * bug-buddy can get a stack trace. So we block by + * trying to lock a mutex we know is already locked. + */ + g_static_mutex_lock (&segv_mutex); } } @@ -105,6 +113,7 @@ main (int argc, char *argv []) sigaction (SIGBUS, &sa, NULL); sigaction (SIGFPE, &sa, NULL); gnome_segv_handler = osa.sa_handler; + g_static_mutex_lock (&segv_mutex); } orb = oaf_init (argc, argv); -- cgit