gdm r5991 - in trunk: . common daemon gui/simple-greeter



Author: mccann
Date: Mon Mar 10 23:02:15 2008
New Revision: 5991
URL: http://svn.gnome.org/viewvc/gdm?rev=5991&view=rev

Log:
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.



Modified:
   trunk/ChangeLog
   trunk/common/gdm-signal-handler.c
   trunk/common/gdm-signal-handler.h
   trunk/daemon/main.c
   trunk/gui/simple-greeter/greeter-main.c

Modified: trunk/common/gdm-signal-handler.c
==============================================================================
--- trunk/common/gdm-signal-handler.c	(original)
+++ trunk/common/gdm-signal-handler.c	Mon Mar 10 23:02:15 2008
@@ -126,10 +126,12 @@
 
                         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 @@
         gboolean success = FALSE;
         int      pid;
 
-        pid = fork();
+        pid = fork ();
         if (pid > 0) {
                 /* Wait for the child to finish */
                 int estatus;
@@ -193,8 +195,8 @@
                 }
         } 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 @@
          * 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 @@
         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 @@
         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 @@
         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)
 {

Modified: trunk/common/gdm-signal-handler.h
==============================================================================
--- trunk/common/gdm-signal-handler.h	(original)
+++ trunk/common/gdm-signal-handler.h	Mon Mar 10 23:02:15 2008
@@ -56,6 +56,7 @@
 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,

Modified: trunk/daemon/main.c
==============================================================================
--- trunk/daemon/main.c	(original)
+++ trunk/daemon/main.c	Mon Mar 10 23:02:15 2008
@@ -442,15 +442,6 @@
         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 @@
 
         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) {

Modified: trunk/gui/simple-greeter/greeter-main.c
==============================================================================
--- trunk/gui/simple-greeter/greeter-main.c	(original)
+++ trunk/gui/simple-greeter/greeter-main.c	Mon Mar 10 23:02:15 2008
@@ -231,15 +231,6 @@
         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 @@
         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 ();



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]