diff options
author | William Jon McCann <jmccann@redhat.com> | 2008-08-15 17:13:36 +0000 |
---|---|---|
committer | William Jon McCann <mccann@src.gnome.org> | 2008-08-15 17:13:36 +0000 |
commit | f5d6584fa8d60ab78ec2307ab7a8787fb6895a91 (patch) | |
tree | 2dfcff0a8bd05eaf6072e2eecec02fba9cf6f1e1 /common | |
parent | 146a464aa0208523e174e65dcbfaa362375bc921 (diff) | |
download | gdm-f5d6584fa8d60ab78ec2307ab7a8787fb6895a91.tar.gz |
Use a callback for the fatal handler instead of supplying the main_loop.
2008-08-15 William Jon McCann <jmccann@redhat.com>
* common/gdm-signal-handler.c (signal_io_watch),
(gdm_signal_handler_set_fatal_func):
* common/gdm-signal-handler.h:
* daemon/factory-slave-main.c (main):
* daemon/gdm-session-direct.c (stop_worker):
* daemon/gdm-session-worker-job.c (session_worker_job_child_watch):
* daemon/main.c (main):
* daemon/product-slave-main.c (main):
* daemon/session-worker-main.c (main):
* daemon/simple-slave-main.c (main):
* daemon/xdmcp-chooser-slave-main.c (main):
Use a callback for the fatal handler instead of supplying
the main_loop.
svn path=/trunk/; revision=6382
Diffstat (limited to 'common')
-rw-r--r-- | common/gdm-signal-handler.c | 27 | ||||
-rw-r--r-- | common/gdm-signal-handler.h | 5 |
2 files changed, 18 insertions, 14 deletions
diff --git a/common/gdm-signal-handler.c b/common/gdm-signal-handler.c index c46df6f2..b9362b3c 100644 --- a/common/gdm-signal-handler.c +++ b/common/gdm-signal-handler.c @@ -50,11 +50,12 @@ typedef struct { struct GdmSignalHandlerPrivate { - GMainLoop *main_loop; - GHashTable *lookup; - GHashTable *id_lookup; - GHashTable *action_lookup; - guint next_id; + GHashTable *lookup; + GHashTable *id_lookup; + GHashTable *action_lookup; + guint next_id; + GDestroyNotify fatal_func; + gpointer fatal_data; }; static void gdm_signal_handler_class_init (GdmSignalHandlerClass *klass); @@ -140,10 +141,11 @@ signal_io_watch (GIOChannel *ioc, block_signals_pop (); if (is_fatal) { - g_debug ("GdmSignalHandler: Caught termination signal - exiting main loop"); - if (handler->priv->main_loop != NULL) { - g_main_loop_quit (handler->priv->main_loop); + if (handler->priv->fatal_func != NULL) { + g_debug ("GdmSignalHandler: Caught termination signal - calling fatal func"); + handler->priv->fatal_func (handler->priv->fatal_data); } else { + g_debug ("GdmSignalHandler: Caught termination signal - exiting"); exit (1); } @@ -456,13 +458,14 @@ signal_list_free (GSList *list) } void -gdm_signal_handler_set_main_loop (GdmSignalHandler *handler, - GMainLoop *main_loop) +gdm_signal_handler_set_fatal_func (GdmSignalHandler *handler, + GDestroyNotify func, + gpointer user_data) { g_return_if_fail (GDM_IS_SIGNAL_HANDLER (handler)); - /* FIXME: take a ref */ - handler->priv->main_loop = main_loop; + handler->priv->fatal_func = func; + handler->priv->fatal_data = user_data; } static void diff --git a/common/gdm-signal-handler.h b/common/gdm-signal-handler.h index 84ccbc6d..20f1860c 100644 --- a/common/gdm-signal-handler.h +++ b/common/gdm-signal-handler.h @@ -53,8 +53,9 @@ typedef struct GType gdm_signal_handler_get_type (void); GdmSignalHandler * gdm_signal_handler_new (void); -void gdm_signal_handler_set_main_loop (GdmSignalHandler *handler, - GMainLoop *main_loop); +void gdm_signal_handler_set_fatal_func (GdmSignalHandler *handler, + GDestroyNotify func, + gpointer user_data); void gdm_signal_handler_add_fatal (GdmSignalHandler *handler); guint gdm_signal_handler_add (GdmSignalHandler *handler, |