gdm r5711 - in trunk: . daemon
- From: mccann svn gnome org
- To: svn-commits-list gnome org
- Subject: gdm r5711 - in trunk: . daemon
- Date: Thu, 7 Feb 2008 02:16:50 +0000 (GMT)
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]