patches/bug-buddy-05-segv-safe.diff
author Jon Tibble <meths@btinternet.com>
Sat, 06 Oct 2012 16:11:50 +0100
branchs11express-2010-11
changeset 22109 db10202d5f6d
parent 17619 3c9ac33b5e30
permissions -rw-r--r--
Added tag oi_151a_prestable7 for changeset 25dee50cecca
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
17619
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
     1
diff -urN bugbuddy.orig/gnome-breakpad/gnome-breakpad.cc bugbuddy.new/gnome-breakpad/gnome-breakpad.cc
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
     2
--- bugbuddy.orig/gnome-breakpad/gnome-breakpad.cc	2010-02-01 15:10:35.296459110 +0000
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
     3
+++ bugbuddy.new/gnome-breakpad/gnome-breakpad.cc	2010-02-01 17:00:55.493486622 +0000
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
     4
@@ -58,6 +58,9 @@
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
     5
 static void    check_if_gdb    ();
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
     6
 
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
     7
 static gchar *bugbuddy;
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
     8
+#if defined(sun) && defined(__SVR4)
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
     9
+static gchar *solaris_bug_buddy_command[4];
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    10
+#endif
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    11
 static GLogFunc old_handler = NULL;
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    12
 
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    13
 typedef struct {
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    14
@@ -202,6 +205,31 @@
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    15
 	}
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    16
 }
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    17
 
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    18
+#if defined(sun) && defined(__SVR4)
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    19
+static void
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    20
+run_bug_buddy_solaris () 
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    21
+{
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    22
+	int pid;
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    23
+	int w;
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    24
+	int status;
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    25
+
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    26
+	pid = fork ();
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    27
+	switch (pid) {
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    28
+		case 0:
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    29
+			execl (solaris_bug_buddy_command[0], solaris_bug_buddy_command[0],
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    30
+                              solaris_bug_buddy_command[1], solaris_bug_buddy_command[2],
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    31
+				solaris_bug_buddy_command[3]);
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    32
+			break;
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    33
+		case -1: 
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    34
+			_exit (1);
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    35
+			break;
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    36
+		default:
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    37
+			w = waitpid (pid, &status, 0);
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    38
+			break;
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    39
+	}
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    40
+}
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    41
+#endif
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    42
+
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    43
 static void
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    44
 bugbuddy_segv_handle(int signum)
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    45
 {
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    46
@@ -221,7 +249,11 @@
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    47
                 _exit(1);
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    48
         }
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    49
 
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    50
+#if defined(sun) && defined(__SVR4)
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    51
+	run_bug_buddy_solaris ();
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    52
+#else
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    53
 	check_if_gdb ();
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    54
+#endif
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    55
 
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    56
 #ifdef ENABLE_GOOGLE_BREAKPAD
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    57
 	/* If we are here is because there are no debug symbols or gdb couldn't be run.
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    58
@@ -505,6 +537,15 @@
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    59
 						NULL, NULL, false);
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    60
 #endif
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    61
 
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    62
+	
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    63
+#if defined(sun) && defined(__SVR4)
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    64
+	solaris_bug_buddy_command[0] = bugbuddy;
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    65
+	solaris_bug_buddy_command[1] = g_strdup_printf ("--appname=%s",
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    66
+							g_get_prgname ());
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    67
+	solaris_bug_buddy_command[2] = g_strdup_printf ("--pid=%d", getpid ());
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    68
+	solaris_bug_buddy_command[3] = NULL;
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    69
+#endif
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    70
+
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    71
         static struct sigaction *setptr;
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    72
        	static struct sigaction old_action;
3c9ac33b5e30 2010-03-01 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    73
        	struct sigaction sa;