task: Reset forked process signal mask
authorYu A Wang <yu.a.wang@intel.com>
Wed, 17 Aug 2011 08:04:32 +0000 (04:04 -0400)
committerSamuel Ortiz <sameo@linux.intel.com>
Wed, 17 Aug 2011 08:51:28 +0000 (10:51 +0200)
The forked process inherits connmand's signal mask and thus has TERM and
INT blocked. As a consequence it can not be killed properly if the signal
mask is not reset.

src/task.c

index b5b9ef7..2fd2567 100644 (file)
@@ -27,6 +27,7 @@
 #include <unistd.h>
 #include <stdarg.h>
 #include <sys/wait.h>
+#include <signal.h>
 
 #include <glib.h>
 
@@ -268,9 +269,14 @@ static void task_died(GPid pid, gint status, gpointer user_data)
 
 static void task_setup(gpointer user_data)
 {
+       sigset_t mask;
        struct connman_task *task = user_data;
 
        DBG("task %p", task);
+
+       sigemptyset(&mask);
+       if (sigprocmask(SIG_SETMASK, &mask, NULL) < 0)
+               connman_error("Failed to clean signal mask");
 }
 
 /**