task: Pass exit code to the exit callback
authorMohamed Abbas <mabbas@linux.intel.com>
Fri, 28 Jan 2011 11:31:30 +0000 (12:31 +0100)
committerSamuel Ortiz <sameo@linux.intel.com>
Fri, 28 Jan 2011 11:31:30 +0000 (12:31 +0100)
include/task.h
plugins/ntpd.c
plugins/vpn.c
plugins/vpn.h
src/task.c

index f608c7e..bde2a29 100644 (file)
@@ -37,7 +37,7 @@ extern "C" {
 struct connman_task;
 
 typedef void (* connman_task_exit_t) (struct connman_task *task,
-                                                       void *user_data);
+                                               int exit_code, void *user_data);
 
 typedef void (* connman_task_notify_t) (struct connman_task *task,
                                DBusMessage *message, void *user_data);
index 731fa46..3ee2ad8 100644 (file)
@@ -109,7 +109,8 @@ static connman_bool_t ntpd_running(void)
        return ret;
 }
 
-static void ntpdate_died(struct connman_task *task, void *user_data)
+static void ntpdate_died(struct connman_task *task,
+                               int exit_code, void *user_data)
 {
        struct ntpdate_task *ntpdate = user_data;
 
index 278e0ea..e1b6404 100644 (file)
@@ -102,7 +102,7 @@ static int kill_tun(char *tun_name)
        return 0;
 }
 
-void vpn_died(struct connman_task *task, void *user_data)
+void vpn_died(struct connman_task *task, int exit_code, void *user_data)
 {
        struct connman_provider *provider = user_data;
        struct vpn_data *data = connman_provider_get_data(provider);
index b2afff5..86e1f73 100644 (file)
@@ -38,4 +38,4 @@ struct vpn_driver {
 int vpn_register(const char *name, struct vpn_driver *driver,
                        const char *program);
 void vpn_unregister(const char *provider_name);
-void vpn_died(struct connman_task *task, void *user_data);
+void vpn_died(struct connman_task *task, int exit_code, void *user_data);
index 541106c..a74c728 100644 (file)
@@ -246,11 +246,15 @@ int connman_task_set_notify(struct connman_task *task, const char *member,
 static void task_died(GPid pid, gint status, gpointer user_data)
 {
        struct connman_task *task = user_data;
+       int exit_code;
 
-       if (WIFEXITED(status))
-               DBG("task %p exit status %d", task, WEXITSTATUS(status));
-       else
+       if (WIFEXITED(status)) {
+               exit_code = WEXITSTATUS(status);
+               DBG("task %p exit status %d", task, exit_code);
+       } else {
+               exit_code = 0;
                DBG("task %p signal %d", task, WTERMSIG(status));
+       }
 
        g_spawn_close_pid(pid);
        task->pid = -1;
@@ -258,7 +262,7 @@ static void task_died(GPid pid, gint status, gpointer user_data)
        task->child_watch = 0;
 
        if (task->exit_func)
-               task->exit_func(task, task->exit_data);
+               task->exit_func(task, exit_code, task->exit_data);
 }
 
 static void task_setup(gpointer user_data)