summaryrefslogtreecommitdiff
path: root/daemon/gdm-server.c
diff options
context:
space:
mode:
authorWilliam Jon McCann <mccann@jhu.edu>2007-10-19 17:26:23 +0000
committerWilliam Jon McCann <mccann@src.gnome.org>2007-10-19 17:26:23 +0000
commit3a8578103249134717574921c3d142bab4d6df94 (patch)
treec22f6c7a329a2230fa72deb6c12bc414a20a74ea /daemon/gdm-server.c
parent365092a43a92b57723297f5bdaad3375aa1efdde (diff)
downloadgdm-3a8578103249134717574921c3d142bab4d6df94.tar.gz
Assign ids to signal handlers. Add functions to remove handlers. Restore
2007-10-19 William Jon McCann <mccann@jhu.edu> * common/gdm-signal-handler.c: (signal_io_watch), (catch_signal), (uncatch_signal), (gdm_signal_handler_add), (callback_data_free), (gdm_signal_handler_remove_and_free_data), (gdm_signal_handler_remove), (find_callback_data_by_func), (gdm_signal_handler_remove_func), (signal_list_free), (gdm_signal_handler_init), (gdm_signal_handler_finalize): * common/gdm-signal-handler.h: * daemon/gdm-server.c: (add_ready_handler), (remove_ready_handler), (gdm_server_spawn), (gdm_server_init), (gdm_server_finalize): Assign ids to signal handlers. Add functions to remove handlers. Restore sigaction when no handlers are present. Fix some memory management bugs. svn path=/trunk/; revision=5386
Diffstat (limited to 'daemon/gdm-server.c')
-rw-r--r--daemon/gdm-server.c21
1 files changed, 18 insertions, 3 deletions
diff --git a/daemon/gdm-server.c b/daemon/gdm-server.c
index 8e493a9e..47142763 100644
--- a/daemon/gdm-server.c
+++ b/daemon/gdm-server.c
@@ -164,7 +164,7 @@ signal_cb (int signo,
}
static void
-setup_ready_signal (GdmServer *server)
+add_ready_handler (GdmServer *server)
{
GdmSignalHandler *signal_handler;
@@ -176,6 +176,19 @@ setup_ready_signal (GdmServer *server)
g_object_unref (signal_handler);
}
+static void
+remove_ready_handler (GdmServer *server)
+{
+ GdmSignalHandler *signal_handler;
+
+ signal_handler = gdm_signal_handler_new ();
+ gdm_signal_handler_remove_func (signal_handler,
+ SIGUSR1,
+ (GdmSignalHandlerFunc)signal_cb,
+ server);
+ g_object_unref (signal_handler);
+}
+
/* We keep a connection (parent_dsp) open with the parent X server
* before running a proxy on it to prevent the X server resetting
* as we open and close other connections.
@@ -612,7 +625,7 @@ gdm_server_spawn (GdmServer *server,
g_ptr_array_foreach (env, (GFunc)g_free, NULL);
g_ptr_array_free (env, TRUE);
- g_debug ("Started X server process: %d", (int)server->priv->pid);
+ g_debug ("Started X server process %d - waiting for READY", (int)server->priv->pid);
server->priv->child_watch_id = g_child_watch_add (server->priv->pid,
(GChildWatchFunc)server_child_watch,
@@ -854,7 +867,7 @@ gdm_server_init (GdmServer *server)
server->priv->command = g_strdup (X_SERVER " -br -verbose");
server->priv->log_dir = g_strdup (LOGDIR);
- setup_ready_signal (server);
+ add_ready_handler (server);
}
static void
@@ -869,6 +882,8 @@ gdm_server_finalize (GObject *object)
g_return_if_fail (server->priv != NULL);
+ remove_ready_handler (server);
+
gdm_server_stop (server);
G_OBJECT_CLASS (gdm_server_parent_class)->finalize (object);