diff options
author | William Jon McCann <jmccann@redhat.com> | 2008-03-10 23:02:15 +0000 |
---|---|---|
committer | William Jon McCann <mccann@src.gnome.org> | 2008-03-10 23:02:15 +0000 |
commit | 20ff1876e77203d3530c6cf8e4f45862e97254e3 (patch) | |
tree | afa292e3b2af07e21bb07733cfd16c74569c89c5 | |
parent | ca0aaedcb657fd3084d7573680901d43a536a86d (diff) | |
download | gdm-20ff1876e77203d3530c6cf8e4f45862e97254e3.tar.gz |
Don't glog in the signal handlers. Add a default SIGTRAP handler so we get
2008-03-10 William Jon McCann <jmccann@redhat.com>
* common/gdm-signal-handler.c: (signal_io_watch),
(crashlogger_get_backtrace), (gdm_signal_handler_backtrace),
(signal_handler), (gdm_signal_handler_add_fatal):
* common/gdm-signal-handler.h:
* daemon/main.c: (signal_cb), (main):
* gui/simple-greeter/greeter-main.c: (signal_cb), (main):
Don't glog in the signal handlers. Add a default
SIGTRAP handler so we get backtraces in unstable releases.
svn path=/trunk/; revision=5991
-rw-r--r-- | ChangeLog | 11 | ||||
-rw-r--r-- | common/gdm-signal-handler.c | 34 | ||||
-rw-r--r-- | common/gdm-signal-handler.h | 1 | ||||
-rw-r--r-- | daemon/main.c | 14 | ||||
-rw-r--r-- | gui/simple-greeter/greeter-main.c | 14 |
5 files changed, 37 insertions, 37 deletions
@@ -1,5 +1,16 @@ 2008-03-10 William Jon McCann <jmccann@redhat.com> + * common/gdm-signal-handler.c: (signal_io_watch), + (crashlogger_get_backtrace), (gdm_signal_handler_backtrace), + (signal_handler), (gdm_signal_handler_add_fatal): + * common/gdm-signal-handler.h: + * daemon/main.c: (signal_cb), (main): + * gui/simple-greeter/greeter-main.c: (signal_cb), (main): + Don't glog in the signal handlers. Add a default + SIGTRAP handler so we get backtraces in unstable releases. + +2008-03-10 William Jon McCann <jmccann@redhat.com> + * gui/simple-greeter/gdm-greeter-login-window.c: (gdm_greeter_login_window_class_init): Remove duplicate signal definition. diff --git a/common/gdm-signal-handler.c b/common/gdm-signal-handler.c index 2c46de58..91d90308 100644 --- a/common/gdm-signal-handler.c +++ b/common/gdm-signal-handler.c @@ -126,10 +126,12 @@ signal_io_watch (GIOChannel *ioc, data = g_hash_table_lookup (handler->priv->id_lookup, l->data); if (data != NULL) { - g_debug ("GdmSignalHandler: running %d handler: %p", signum, data->func); - res = data->func (signum, data->data); - if (! res) { - is_fatal = TRUE; + if (data->func != NULL) { + g_debug ("GdmSignalHandler: running %d handler: %p", signum, data->func); + res = data->func (signum, data->data); + if (! res) { + is_fatal = TRUE; + } } } } @@ -181,7 +183,7 @@ crashlogger_get_backtrace (void) gboolean success = FALSE; int pid; - pid = fork(); + pid = fork (); if (pid > 0) { /* Wait for the child to finish */ int estatus; @@ -193,8 +195,8 @@ crashlogger_get_backtrace (void) } } else if (pid == 0) { /* Child process */ - execl (LIBEXECDIR"/gdm-crash-logger", - LIBEXECDIR"/gdm-crash-logger", NULL); + execl (LIBEXECDIR "/gdm-crash-logger", + LIBEXECDIR "/gdm-crash-logger", NULL); } return success; @@ -211,7 +213,7 @@ gdm_signal_handler_backtrace (void) * we get much better information out of it. Otherwise * fall back to execinfo. */ - if (g_stat (LIBEXECDIR"/gdm-crash-logger", &s) == 0) { + if (g_stat (LIBEXECDIR "/gdm-crash-logger", &s) == 0) { fallback = crashlogger_get_backtrace () ? FALSE : TRUE; } @@ -239,7 +241,7 @@ signal_handler (int signo) case SIGBUS: case SIGILL: case SIGABRT: - g_warning ("Caught signal %d. Generating backtrace...", signo); + case SIGTRAP: gdm_signal_handler_backtrace (); exit (1); break; @@ -247,8 +249,6 @@ signal_handler (int signo) case SIGPIPE: /* let the fatal signals interrupt us */ --in_fatal; - - g_warning ("Caught signal %d, shutting down abnormally. Generating backtrace...", signo); gdm_signal_handler_backtrace (); ignore = write (signal_pipes [1], &signo_byte, 1); break; @@ -333,6 +333,18 @@ gdm_signal_handler_add (GdmSignalHandler *handler, return cdata->id; } +void +gdm_signal_handler_add_fatal (GdmSignalHandler *handler) +{ + g_return_if_fail (GDM_IS_SIGNAL_HANDLER (handler)); + + gdm_signal_handler_add (handler, SIGILL, NULL, NULL); + gdm_signal_handler_add (handler, SIGBUS, NULL, NULL); + gdm_signal_handler_add (handler, SIGSEGV, NULL, NULL); + gdm_signal_handler_add (handler, SIGABRT, NULL, NULL); + gdm_signal_handler_add (handler, SIGTRAP, NULL, NULL); +} + static void callback_data_free (CallbackData *d) { diff --git a/common/gdm-signal-handler.h b/common/gdm-signal-handler.h index 609ef17e..84ccbc6d 100644 --- a/common/gdm-signal-handler.h +++ b/common/gdm-signal-handler.h @@ -56,6 +56,7 @@ GdmSignalHandler * gdm_signal_handler_new (void); void gdm_signal_handler_set_main_loop (GdmSignalHandler *handler, GMainLoop *main_loop); +void gdm_signal_handler_add_fatal (GdmSignalHandler *handler); guint gdm_signal_handler_add (GdmSignalHandler *handler, int signal_number, GdmSignalHandlerFunc callback, diff --git a/daemon/main.c b/daemon/main.c index 2f8f82cb..21fefc8a 100644 --- a/daemon/main.c +++ b/daemon/main.c @@ -442,15 +442,6 @@ signal_cb (int signo, ret = TRUE; switch (signo) { - case SIGSEGV: - case SIGBUS: - case SIGILL: - case SIGABRT: - g_debug ("Caught signal %d.", signo); - - ret = FALSE; - break; - case SIGFPE: case SIGPIPE: /* let the fatal signals interrupt us */ @@ -624,14 +615,11 @@ main (int argc, signal_handler = gdm_signal_handler_new (); gdm_signal_handler_set_main_loop (signal_handler, main_loop); + gdm_signal_handler_add_fatal (signal_handler); gdm_signal_handler_add (signal_handler, SIGTERM, signal_cb, NULL); gdm_signal_handler_add (signal_handler, SIGINT, signal_cb, NULL); - gdm_signal_handler_add (signal_handler, SIGILL, signal_cb, NULL); - gdm_signal_handler_add (signal_handler, SIGBUS, signal_cb, NULL); gdm_signal_handler_add (signal_handler, SIGFPE, signal_cb, NULL); gdm_signal_handler_add (signal_handler, SIGHUP, signal_cb, NULL); - gdm_signal_handler_add (signal_handler, SIGSEGV, signal_cb, NULL); - gdm_signal_handler_add (signal_handler, SIGABRT, signal_cb, NULL); gdm_signal_handler_add (signal_handler, SIGUSR1, signal_cb, NULL); if (do_timed_exit) { diff --git a/gui/simple-greeter/greeter-main.c b/gui/simple-greeter/greeter-main.c index ef13d091..75985d29 100644 --- a/gui/simple-greeter/greeter-main.c +++ b/gui/simple-greeter/greeter-main.c @@ -231,15 +231,6 @@ signal_cb (int signo, ret = TRUE; switch (signo) { - case SIGSEGV: - case SIGBUS: - case SIGILL: - case SIGABRT: - g_debug ("Caught signal %d.", signo); - - ret = FALSE; - break; - case SIGFPE: case SIGPIPE: /* let the fatal signals interrupt us */ @@ -327,14 +318,11 @@ main (int argc, char *argv[]) gtk_init (&argc, &argv); signal_handler = gdm_signal_handler_new (); + gdm_signal_handler_add_fatal (signal_handler); gdm_signal_handler_add (signal_handler, SIGTERM, signal_cb, NULL); gdm_signal_handler_add (signal_handler, SIGINT, signal_cb, NULL); - gdm_signal_handler_add (signal_handler, SIGILL, signal_cb, NULL); - gdm_signal_handler_add (signal_handler, SIGBUS, signal_cb, NULL); gdm_signal_handler_add (signal_handler, SIGFPE, signal_cb, NULL); gdm_signal_handler_add (signal_handler, SIGHUP, signal_cb, NULL); - gdm_signal_handler_add (signal_handler, SIGSEGV, signal_cb, NULL); - gdm_signal_handler_add (signal_handler, SIGABRT, signal_cb, NULL); gdm_signal_handler_add (signal_handler, SIGUSR1, signal_cb, NULL); session = gdm_greeter_session_new (); |