gdm r5711 - in trunk: . daemon



Author: mccann
Date: Thu Feb  7 02:16:50 2008
New Revision: 5711
URL: http://svn.gnome.org/viewvc/gdm?rev=5711&view=rev

Log:
2008-02-06  William Jon McCann  <jmccann redhat com>

	* daemon/gdm-factory-slave.c: (on_server_ready),
	(on_server_exited), (on_server_died), (gdm_factory_slave_run):
	* daemon/gdm-product-slave.c: (on_server_ready),
	(on_server_exited), (on_server_died),
	(gdm_product_slave_create_server):
	* daemon/gdm-server.c: (server_child_watch),
	(gdm_server_class_init):
	* daemon/gdm-server.h:
	* daemon/gdm-simple-slave.c: (on_server_ready), (on_server_exited),
	(on_server_died), (gdm_simple_slave_run):
	* daemon/gdm-slave.c: (gdm_slave_connect_to_x11_display):
	Make sure we catch the xserver exiting.



Modified:
   trunk/ChangeLog
   trunk/daemon/gdm-factory-slave.c
   trunk/daemon/gdm-product-slave.c
   trunk/daemon/gdm-server.c
   trunk/daemon/gdm-server.h
   trunk/daemon/gdm-simple-slave.c
   trunk/daemon/gdm-slave.c

Modified: trunk/daemon/gdm-factory-slave.c
==============================================================================
--- trunk/daemon/gdm-factory-slave.c	(original)
+++ trunk/daemon/gdm-factory-slave.c	Thu Feb  7 02:16:50 2008
@@ -581,14 +581,36 @@
 }
 
 static void
-server_ready_cb (GdmServer *server,
-                 GdmFactorySlave  *slave)
+on_server_ready (GdmServer       *server,
+                 GdmFactorySlave *slave)
 {
         g_debug ("GdmFactorySlave: Server ready");
 
         g_timeout_add (500, (GSourceFunc)idle_connect_to_display, slave);
 }
 
+static void
+on_server_exited (GdmServer       *server,
+                  int              exit_code,
+                  GdmFactorySlave *slave)
+{
+        g_debug ("GdmFactorySlave: server exited with code %d\n", exit_code);
+
+        gdm_slave_stopped (GDM_SLAVE (slave));
+}
+
+static void
+on_server_died (GdmServer       *server,
+                int              signal_number,
+                GdmFactorySlave *slave)
+{
+        g_debug ("GdmFactorySlave: server died with signal %d, (%s)",
+                 signal_number,
+                 g_strsignal (signal_number));
+
+        gdm_slave_stopped (GDM_SLAVE (slave));
+}
+
 static gboolean
 gdm_factory_slave_run (GdmFactorySlave *slave)
 {
@@ -608,10 +630,17 @@
                 gboolean res;
 
                 slave->priv->server = gdm_server_new (display_name, auth_file);
-
+                g_signal_connect (slave->priv->server,
+                                  "exited",
+                                  G_CALLBACK (on_server_exited),
+                                  slave);
+                g_signal_connect (slave->priv->server,
+                                  "died",
+                                  G_CALLBACK (on_server_died),
+                                  slave);
                 g_signal_connect (slave->priv->server,
                                   "ready",
-                                  G_CALLBACK (server_ready_cb),
+                                  G_CALLBACK (on_server_ready),
                                   slave);
 
                 res = gdm_server_start (slave->priv->server);

Modified: trunk/daemon/gdm-product-slave.c
==============================================================================
--- trunk/daemon/gdm-product-slave.c	(original)
+++ trunk/daemon/gdm-product-slave.c	Thu Feb  7 02:16:50 2008
@@ -329,12 +329,34 @@
 }
 
 static void
-server_ready_cb (GdmServer       *server,
+on_server_ready (GdmServer       *server,
                  GdmProductSlave *slave)
 {
         g_timeout_add (500, (GSourceFunc)idle_connect_to_display, slave);
 }
 
+static void
+on_server_exited (GdmServer       *server,
+                  int              exit_code,
+                  GdmProductSlave *slave)
+{
+        g_debug ("GdmProductSlave: server exited with code %d\n", exit_code);
+
+        gdm_slave_stopped (GDM_SLAVE (slave));
+}
+
+static void
+on_server_died (GdmServer       *server,
+                int              signal_number,
+                GdmProductSlave *slave)
+{
+        g_debug ("GdmProductSlave: server died with signal %d, (%s)",
+                 signal_number,
+                 g_strsignal (signal_number));
+
+        gdm_slave_stopped (GDM_SLAVE (slave));
+}
+
 static gboolean
 gdm_product_slave_create_server (GdmProductSlave *slave)
 {
@@ -354,10 +376,17 @@
                 gboolean res;
 
                 slave->priv->server = gdm_server_new (display_name, auth_file);
-
+                g_signal_connect (slave->priv->server,
+                                  "exited",
+                                  G_CALLBACK (on_server_exited),
+                                  slave);
+                g_signal_connect (slave->priv->server,
+                                  "died",
+                                  G_CALLBACK (on_server_died),
+                                  slave);
                 g_signal_connect (slave->priv->server,
                                   "ready",
-                                  G_CALLBACK (server_ready_cb),
+                                  G_CALLBACK (on_server_ready),
                                   slave);
 
                 res = gdm_server_start (slave->priv->server);

Modified: trunk/daemon/gdm-server.c
==============================================================================
--- trunk/daemon/gdm-server.c	(original)
+++ trunk/daemon/gdm-server.c	Thu Feb  7 02:16:50 2008
@@ -100,6 +100,8 @@
 
 enum {
         READY,
+        EXITED,
+        DIED,
         LAST_SIGNAL
 };
 
@@ -575,6 +577,14 @@
                  : WIFSIGNALED (status) ? WTERMSIG (status)
                  : -1);
 
+        if (WIFEXITED (status)) {
+                int code = WEXITSTATUS (status);
+                g_signal_emit (server, signals [EXITED], 0, code);
+        } else if (WIFSIGNALED (status)) {
+                int num = WTERMSIG (status);
+                g_signal_emit (server, signals [DIED], 0, num);
+        }
+
         g_spawn_close_pid (server->priv->pid);
         server->priv->pid = -1;
 }
@@ -853,6 +863,28 @@
                               g_cclosure_marshal_VOID__VOID,
                               G_TYPE_NONE,
                               0);
+        signals [EXITED] =
+                g_signal_new ("exited",
+                              G_OBJECT_CLASS_TYPE (object_class),
+                              G_SIGNAL_RUN_FIRST,
+                              G_STRUCT_OFFSET (GdmServerClass, exited),
+                              NULL,
+                              NULL,
+                              g_cclosure_marshal_VOID__INT,
+                              G_TYPE_NONE,
+                              1,
+                              G_TYPE_INT);
+        signals [DIED] =
+                g_signal_new ("died",
+                              G_OBJECT_CLASS_TYPE (object_class),
+                              G_SIGNAL_RUN_FIRST,
+                              G_STRUCT_OFFSET (GdmServerClass, died),
+                              NULL,
+                              NULL,
+                              g_cclosure_marshal_VOID__INT,
+                              G_TYPE_NONE,
+                              1,
+                              G_TYPE_INT);
 
         g_object_class_install_property (object_class,
                                          PROP_DISPLAY_NAME,

Modified: trunk/daemon/gdm-server.h
==============================================================================
--- trunk/daemon/gdm-server.h	(original)
+++ trunk/daemon/gdm-server.h	Thu Feb  7 02:16:50 2008
@@ -45,7 +45,11 @@
 {
         GObjectClass   parent_class;
 
-        void          (* ready)    (GdmServer *server);
+        void (* ready)             (GdmServer *server);
+        void (* exited)            (GdmServer *server,
+                                    int        exit_code);
+        void (* died)              (GdmServer *server,
+                                    int        signal_number);
 } GdmServerClass;
 
 GType               gdm_server_get_type  (void);

Modified: trunk/daemon/gdm-simple-slave.c
==============================================================================
--- trunk/daemon/gdm-simple-slave.c	(original)
+++ trunk/daemon/gdm-simple-slave.c	Thu Feb  7 02:16:50 2008
@@ -758,12 +758,34 @@
 }
 
 static void
-server_ready_cb (GdmServer      *server,
+on_server_ready (GdmServer      *server,
                  GdmSimpleSlave *slave)
 {
         g_timeout_add (500, (GSourceFunc)idle_connect_to_display, slave);
 }
 
+static void
+on_server_exited (GdmServer      *server,
+                  int             exit_code,
+                  GdmSimpleSlave *slave)
+{
+        g_debug ("GdmSimpleSlave: server exited with code %d\n", exit_code);
+
+        gdm_slave_stopped (GDM_SLAVE (slave));
+}
+
+static void
+on_server_died (GdmServer      *server,
+                int             signal_number,
+                GdmSimpleSlave *slave)
+{
+        g_debug ("GdmSimpleSlave: server died with signal %d, (%s)",
+                 signal_number,
+                 g_strsignal (signal_number));
+
+        gdm_slave_stopped (GDM_SLAVE (slave));
+}
+
 static gboolean
 gdm_simple_slave_run (GdmSimpleSlave *slave)
 {
@@ -783,10 +805,17 @@
                 gboolean res;
 
                 slave->priv->server = gdm_server_new (display_name, auth_file);
-
+                g_signal_connect (slave->priv->server,
+                                  "exited",
+                                  G_CALLBACK (on_server_exited),
+                                  slave);
+                g_signal_connect (slave->priv->server,
+                                  "died",
+                                  G_CALLBACK (on_server_died),
+                                  slave);
                 g_signal_connect (slave->priv->server,
                                   "ready",
-                                  G_CALLBACK (server_ready_cb),
+                                  G_CALLBACK (on_server_ready),
                                   slave);
 
                 res = gdm_server_start (slave->priv->server);

Modified: trunk/daemon/gdm-slave.c
==============================================================================
--- trunk/daemon/gdm-slave.c	(original)
+++ trunk/daemon/gdm-slave.c	Thu Feb  7 02:16:50 2008
@@ -384,13 +384,6 @@
         g_setenv ("DISPLAY", slave->priv->display_name, TRUE);
         g_setenv ("XAUTHORITY", slave->priv->display_x11_authority_file, TRUE);
 
-#if 0
-        /* X error handlers to avoid the default one (i.e. exit (1)) */
-        do_xfailed_on_xio_error = TRUE;
-        XSetErrorHandler (gdm_slave_xerror_handler);
-        XSetIOErrorHandler (gdm_slave_xioerror_handler);
-#endif
-
         sigemptyset (&mask);
         sigaddset (&mask, SIGCHLD);
         sigprocmask (SIG_BLOCK, &mask, &omask);



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