diff options
author | Denis Kenzior <denkenz@gmail.com> | 2009-12-02 20:10:18 -0600 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2009-12-02 20:10:18 -0600 |
commit | 0500fadc63340371775e7c5b91dd1f12331c4add (patch) | |
tree | bfd7f4e9c40a77aeb53cd1b74d6889fb5ac8926d /src/main.c | |
parent | 39568bbef72ac84c0a20a1c1257581405c5acc88 (diff) | |
download | ofono-0500fadc63340371775e7c5b91dd1f12331c4add.tar.bz2 |
Fix: Be a bit more signal-handler safe
Diffstat (limited to 'src/main.c')
-rw-r--r-- | src/main.c | 17 |
1 files changed, 12 insertions, 5 deletions
@@ -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) |