From 0500fadc63340371775e7c5b91dd1f12331c4add Mon Sep 17 00:00:00 2001 From: Denis Kenzior Date: Wed, 2 Dec 2009 20:10:18 -0600 Subject: Fix: Be a bit more signal-handler safe --- src/main.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'src/main.c') diff --git a/src/main.c b/src/main.c index 3b95e159..a70f4ed2 100644 --- a/src/main.c +++ b/src/main.c @@ -36,7 +36,7 @@ #define SHUTDOWN_GRACE_SECONDS 10 static GMainLoop *event_loop; -static guint quit_eventloop_source = 0; +static volatile sig_atomic_t terminated = 0; void __ofono_exit() { @@ -54,14 +54,21 @@ static void sig_debug(int sig) __ofono_toggle_debug(); } +static gboolean initiate_shutdown(gpointer user_data) +{ + g_timeout_add_seconds(SHUTDOWN_GRACE_SECONDS, quit_eventloop, NULL); + __ofono_modem_shutdown(); + + return FALSE; +} + static void sig_term(int sig) { - if (quit_eventloop_source != 0) + if (terminated > 0) return; - quit_eventloop_source = g_timeout_add_seconds(SHUTDOWN_GRACE_SECONDS, - quit_eventloop, NULL); - __ofono_modem_shutdown(); + terminated = 1; + g_idle_add(initiate_shutdown, NULL); } static void system_bus_disconnected(DBusConnection *conn, void *user_data) -- cgit v1.2.3