X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fcore%2Funit.c;h=d5acc728ecdec2527dd50d94dc487947abc0a2cd;hb=7358dc029ab8cb8f9d83eb847389d84f822ccfe8;hp=afb760d4a3ecd334e2fd435beeac780fb68f2e7c;hpb=f189ab18de69d3dee81117d7925fb370cd038f0f;p=elogind.git diff --git a/src/core/unit.c b/src/core/unit.c index afb760d4a..d5acc728e 100644 --- a/src/core/unit.c +++ b/src/core/unit.c @@ -2768,7 +2768,8 @@ int unit_coldplug(Unit *u) { void unit_status_printf(Unit *u, const char *status, const char *unit_status_msg_format) { DISABLE_WARNING_FORMAT_NONLITERAL; - manager_status_printf(u->manager, false, status, unit_status_msg_format, unit_description(u)); + manager_status_printf(u->manager, STATUS_TYPE_NORMAL, + status, unit_status_msg_format, unit_description(u)); REENABLE_WARNING; } @@ -2938,18 +2939,16 @@ int unit_kill_common( if (who == KILL_MAIN && main_pid <= 0) { if (main_pid < 0) - sd_bus_error_setf(error, BUS_ERROR_NO_SUCH_PROCESS, "%s units have no main processes", unit_type_to_string(u->type)); + return sd_bus_error_setf(error, BUS_ERROR_NO_SUCH_PROCESS, "%s units have no main processes", unit_type_to_string(u->type)); else - sd_bus_error_set_const(error, BUS_ERROR_NO_SUCH_PROCESS, "No main process to kill"); - return -ESRCH; + return sd_bus_error_set_const(error, BUS_ERROR_NO_SUCH_PROCESS, "No main process to kill"); } if (who == KILL_CONTROL && control_pid <= 0) { if (control_pid < 0) - sd_bus_error_setf(error, BUS_ERROR_NO_SUCH_PROCESS, "%s units have no control processes", unit_type_to_string(u->type)); + return sd_bus_error_setf(error, BUS_ERROR_NO_SUCH_PROCESS, "%s units have no control processes", unit_type_to_string(u->type)); else - sd_bus_error_set_const(error, BUS_ERROR_NO_SUCH_PROCESS, "No control process to kill"); - return -ESRCH; + return sd_bus_error_set_const(error, BUS_ERROR_NO_SUCH_PROCESS, "No control process to kill"); } if (who == KILL_CONTROL || who == KILL_ALL) @@ -3312,7 +3311,7 @@ int unit_make_transient(Unit *u) { int unit_kill_context( Unit *u, KillContext *c, - bool sigkill, + KillOperation k, pid_t main_pid, pid_t control_pid, bool main_pid_alien) { @@ -3325,7 +3324,19 @@ int unit_kill_context( if (c->kill_mode == KILL_NONE) return 0; - sig = sigkill ? SIGKILL : c->kill_signal; + switch (k) { + case KILL_KILL: + sig = SIGKILL; + break; + case KILL_ABORT: + sig = SIGABRT; + break; + case KILL_TERMINATE: + sig = c->kill_signal; + break; + default: + assert_not_reached("KillOperation unknown"); + } if (main_pid > 0) { r = kill_and_sigcont(main_pid, sig); @@ -3339,7 +3350,7 @@ int unit_kill_context( if (!main_pid_alien) wait_for_exit = true; - if (c->send_sighup && !sigkill) + if (c->send_sighup && k != KILL_KILL) kill(main_pid, SIGHUP); } } @@ -3355,12 +3366,12 @@ int unit_kill_context( } else { wait_for_exit = true; - if (c->send_sighup && !sigkill) + if (c->send_sighup && k != KILL_KILL) kill(control_pid, SIGHUP); } } - if ((c->kill_mode == KILL_CONTROL_GROUP || (c->kill_mode == KILL_MIXED && sigkill)) && u->cgroup_path) { + if ((c->kill_mode == KILL_CONTROL_GROUP || (c->kill_mode == KILL_MIXED && k == KILL_KILL)) && u->cgroup_path) { _cleanup_set_free_ Set *pid_set = NULL; /* Exclude the main/control pids from being killed via the cgroup */ @@ -3384,7 +3395,7 @@ int unit_kill_context( /* wait_for_exit = true; */ - if (c->send_sighup && !sigkill) { + if (c->send_sighup && k != KILL_KILL) { set_free(pid_set); pid_set = unit_pid_set(main_pid, control_pid);