1 16912 mattman /jds/bin/diff -uprN bug-buddy-2.25.2.old/gnome-breakpad/gnome-breakpad.cc bug-buddy-2.25.2/gnome-breakpad/gnome-breakpad.cc 2 16912 mattman --- bug-buddy-2.25.2.old/gnome-breakpad/gnome-breakpad.cc 2008-12-11 12:57:57.762310000 +0000 3 16912 mattman +++ bug-buddy-2.25.2/gnome-breakpad/gnome-breakpad.cc 2008-12-11 13:11:10.651856000 +0000 4 16912 mattman @@ -32,6 +32,7 @@ 5 12039 mattman #include <sys/stat.h> 6 12039 mattman #include <fcntl.h> 7 12039 mattman #include <signal.h> 8 12039 mattman +#include <dlfcn.h> 9 12039 mattman #include <sys/wait.h> 10 12039 mattman 11 12039 mattman #include <glib.h> 12 16912 mattman @@ -494,6 +495,7 @@ check_if_gdb () 13 12207 mattman int 14 12207 mattman gtk_module_init (int *argc, char** argv[]) 15 12207 mattman { 16 15576 mattman + void *handle; 17 12207 mattman bugbuddy = g_find_program_in_path ("bug-buddy"); 18 12207 mattman 19 12207 mattman if (bugbuddy && !g_getenv ("GNOME_DISABLE_CRASH_DIALOG")) { 20 16912 mattman @@ -503,35 +505,40 @@ gtk_module_init (int *argc, char** argv[ 21 16912 mattman NULL, NULL, false); 22 16912 mattman #endif 23 12207 mattman 24 16912 mattman - static struct sigaction *setptr; 25 16912 mattman - static struct sigaction old_action; 26 16912 mattman - struct sigaction sa; 27 16912 mattman + static struct sigaction *setptr; 28 16912 mattman + static struct sigaction old_action; 29 16912 mattman + struct sigaction sa; 30 16912 mattman memset(&sa, 0, sizeof(sa)); 31 16912 mattman setptr = &sa; 32 12039 mattman 33 16912 mattman - sa.sa_handler = bugbuddy_segv_handle; 34 16912 mattman + sa.sa_handler = bugbuddy_segv_handle; 35 16912 mattman 36 12207 mattman - sigaction(SIGSEGV, NULL, &old_action); 37 12207 mattman - if (old_action.sa_handler == SIG_DFL) 38 12207 mattman - sigaction(SIGSEGV, setptr, NULL); 39 12207 mattman - 40 12207 mattman - sigaction(SIGABRT, NULL, &old_action); 41 12207 mattman - if (old_action.sa_handler == SIG_DFL) 42 12207 mattman - sigaction(SIGABRT, setptr, NULL); 43 12207 mattman - 44 12207 mattman - sigaction(SIGTRAP, NULL, &old_action); 45 12207 mattman - if (old_action.sa_handler == SIG_DFL) 46 12207 mattman - sigaction(SIGTRAP, setptr, NULL); 47 12207 mattman - 48 12207 mattman - sigaction(SIGFPE, NULL, &old_action); 49 12207 mattman - if (old_action.sa_handler == SIG_DFL) 50 12207 mattman - sigaction(SIGFPE, setptr, NULL); 51 12207 mattman - 52 12207 mattman - sigaction(SIGBUS, NULL, &old_action); 53 12207 mattman - if (old_action.sa_handler == SIG_DFL) 54 12207 mattman - sigaction(SIGBUS, setptr, NULL); 55 16912 mattman + if ((handle = dlopen ("libjsig.so", RTLD_LAZY)) == NULL) { 56 16912 mattman + sigaction(SIGSEGV, NULL, &old_action); 57 16912 mattman + if (old_action.sa_handler == SIG_DFL) 58 16912 mattman + sigaction(SIGSEGV, setptr, NULL); 59 12207 mattman + 60 16912 mattman + sigaction(SIGABRT, NULL, &old_action); 61 16912 mattman + if (old_action.sa_handler == SIG_DFL) 62 16912 mattman + sigaction(SIGABRT, setptr, NULL); 63 12207 mattman + 64 16912 mattman + sigaction(SIGTRAP, NULL, &old_action); 65 16912 mattman + if (old_action.sa_handler == SIG_DFL) 66 16912 mattman + sigaction(SIGTRAP, setptr, NULL); 67 12207 mattman + 68 16912 mattman + sigaction(SIGFPE, NULL, &old_action); 69 16912 mattman + if (old_action.sa_handler == SIG_DFL) 70 16912 mattman + sigaction(SIGFPE, setptr, NULL); 71 12207 mattman + 72 16912 mattman + sigaction(SIGBUS, NULL, &old_action); 73 16912 mattman + if (old_action.sa_handler == SIG_DFL) 74 16912 mattman + sigaction(SIGBUS, setptr, NULL); 75 16912 mattman + 76 16912 mattman + old_handler = g_log_set_default_handler (bug_buddy_log_handler, NULL); 77 16912 mattman + } else { 78 16912 mattman + dlclose (handle); 79 16912 mattman + } 80 16912 mattman 81 16912 mattman - old_handler = g_log_set_default_handler (bug_buddy_log_handler, NULL); 82 12039 mattman } 83 12207 mattman return 0; 84 15576 mattman } 85