[evolution-patches] eds crashloop
- From: Not Zed <notzed ximian com>
- To: evolution-patches lists ximian com
- Subject: [evolution-patches] eds crashloop
- Date: Mon, 02 Aug 2004 06:44:35 +0000
does that evolution does. otherwise very odd things happen when you get a crash, often it will loop forever, otherwise e-d-s will keep running in the other threads without exiting.
Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/evolution-data-server/ChangeLog,v
retrieving revision 1.142
diff -u -3 -r1.142 ChangeLog
--- ChangeLog 29 Jul 2004 15:54:09 -0000 1.142
+++ ChangeLog 2 Aug 2004 06:36:03 -0000
@@ -1,3 +1,10 @@
+2004-08-02 Not Zed <NotZed Ximian com>
+
+ * src/server.c (gnome_segv_handler): deadlock in non-main threads
+ so we only run once, and increment our recursive-call code
+ properly, and actually exit anyway. should fix infinite crash
+ loop crap.
+
2004-07-29 Rodney Dawes <dobey novell com>
* configure.in: Check for libgnomeui_serverdir with pkgconfig, and
Index: src/server.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/src/server.c,v
retrieving revision 1.19
diff -u -3 -r1.19 server.c
--- src/server.c 29 Jul 2004 15:54:09 -0000 1.19
+++ src/server.c 2 Aug 2004 06:36:03 -0000
@@ -30,6 +30,8 @@
#include <stdlib.h>
#include <sys/signal.h>
+#include <unistd.h>
+#include <pthread.h>
#include <glib.h>
#include <libgnome/gnome-init.h>
@@ -83,6 +85,8 @@
static GStaticMutex termination_lock = G_STATIC_MUTEX_INIT;
+static pthread_mutex_t segv_mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_t main_thread;
static void
gnome_segv_handler (int signo)
@@ -90,7 +94,14 @@
const char *gnome_segv_path;
static int in_segv = 0;
char *exec;
-
+
+ if (pthread_self() != main_thread) {
+ /* deadlock intentionally in the sub-threads */
+ pthread_kill(main_thread, signo);
+ pthread_mutex_lock(&segv_mutex);
+ }
+
+ in_segv++;
if (in_segv > 2) {
/* The fprintf() was segfaulting, we are just totally hosed */
_exit (1);
@@ -105,6 +116,8 @@
exec = g_strdup_printf ("%s \"" PACKAGE "\" %d \"" VERSION "\"", gnome_segv_path, signo);
system (exec);
g_free (exec);
+
+ _exit(1);
}
static void
@@ -118,6 +131,9 @@
sigaction (SIGSEGV, &sa, NULL);
sigaction (SIGBUS, &sa, NULL);
sigaction (SIGFPE, &sa, NULL);
+
+ main_thread = pthread_self();
+ pthread_mutex_lock(&segv_mutex);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]