X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fservice.c;h=465e1a7a58ecc4bfb97519eec167c309f4d55ad4;hp=39a46d6cf563a1b47edc41f583cac0c6f4ea17bc;hb=85211309f0e14d7f804e1367e838291f39f6cec0;hpb=35b8ca3aaf8cb044ad76675dfcad89e000dd4a5c diff --git a/src/service.c b/src/service.c index 39a46d6cf..465e1a7a5 100644 --- a/src/service.c +++ b/src/service.c @@ -345,9 +345,7 @@ static int sysv_translate_facility(const char *name, const char *filename, char return -ENOMEM; finish: - - if (_r) - *_r = r; + *_r = r; return 1; } @@ -837,7 +835,7 @@ static int service_load_sysv_path(Service *s, const char *path) { if (description) { char *d; - if (!(d = strappend("LSB: ", description))) { + if (!(d = strappend(s->sysv_has_lsb ? "LSB: " : "SysV: ", description))) { r = -ENOMEM; goto finish; } @@ -1830,9 +1828,9 @@ static void service_enter_signal(Service *s, ServiceState state, bool success) { int sig = (state == SERVICE_STOP_SIGTERM || state == SERVICE_FINAL_SIGTERM) ? s->exec_context.kill_signal : SIGKILL; if (s->main_pid > 0) { - if (kill(s->exec_context.kill_mode == KILL_PROCESS_GROUP ? - -s->main_pid : - s->main_pid, sig) < 0 && errno != ESRCH) + if (kill_and_sigcont(s->exec_context.kill_mode == KILL_PROCESS_GROUP ? + -s->main_pid : + s->main_pid, sig) < 0 && errno != ESRCH) log_warning("Failed to kill main process %li: %m", (long) s->main_pid); else @@ -1840,9 +1838,9 @@ static void service_enter_signal(Service *s, ServiceState state, bool success) { } if (s->control_pid > 0) { - if (kill(s->exec_context.kill_mode == KILL_PROCESS_GROUP ? - -s->control_pid : - s->control_pid, sig) < 0 && errno != ESRCH) + if (kill_and_sigcont(s->exec_context.kill_mode == KILL_PROCESS_GROUP ? + -s->control_pid : + s->control_pid, sig) < 0 && errno != ESRCH) log_warning("Failed to kill control process %li: %m", (long) s->control_pid); else @@ -1865,7 +1863,7 @@ static void service_enter_signal(Service *s, ServiceState state, bool success) { if ((r = set_put(pid_set, LONG_TO_PTR(s->control_pid))) < 0) goto fail; - if ((r = cgroup_bonding_kill_list(s->meta.cgroup_bondings, sig, pid_set)) < 0) { + if ((r = cgroup_bonding_kill_list(s->meta.cgroup_bondings, sig, true, pid_set)) < 0) { if (r != -EAGAIN && r != -ESRCH && r != -ENOENT) log_warning("Failed to kill control group: %s", strerror(-r)); } else if (r > 0) @@ -3230,7 +3228,7 @@ static int service_kill(Unit *u, KillWho who, KillMode mode, int signo, DBusErro goto finish; } - if ((q = cgroup_bonding_kill_list(s->meta.cgroup_bondings, signo, pid_set)) < 0) + if ((q = cgroup_bonding_kill_list(s->meta.cgroup_bondings, signo, false, pid_set)) < 0) if (r != -EAGAIN && r != -ESRCH && r != -ENOENT) r = q; }