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);
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;
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);
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);
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;
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)