summaryrefslogtreecommitdiffstats
path: root/src/main.c
diff options
context:
space:
mode:
authorDenis Kenzior <denkenz@gmail.com>2009-12-02 20:10:18 -0600
committerDenis Kenzior <denkenz@gmail.com>2009-12-02 20:10:18 -0600
commit0500fadc63340371775e7c5b91dd1f12331c4add (patch)
treebfd7f4e9c40a77aeb53cd1b74d6889fb5ac8926d /src/main.c
parent39568bbef72ac84c0a20a1c1257581405c5acc88 (diff)
downloadofono-0500fadc63340371775e7c5b91dd1f12331c4add.tar.bz2
Fix: Be a bit more signal-handler safe
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c17
1 files changed, 12 insertions, 5 deletions
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)