if (!m->unit) {
_cleanup_free_ char *escaped = NULL;
- char *scope, *description, *job;
+ char *scope, *description, *job = NULL;
escaped = unit_name_escape(m->name);
if (!escaped)
static int machine_stop_scope(Machine *m) {
_cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
- char *job;
+ char *job = NULL;
int r;
assert(m);
if (!m->unit)
return -ESRCH;
- return manager_kill_unit(m->manager, m->unit, who, signo, NULL);
+ if (who == KILL_LEADER) {
+ /* If we shall simply kill the leader, do so directly */
+
+ if (kill(m->leader, signo) < 0)
+ return -errno;
+ }
+
+ /* Otherwise make PID 1 do it for us, for the entire cgroup */
+ return manager_kill_unit(m->manager, m->unit, signo, NULL);
}
static const char* const machine_class_table[_MACHINE_CLASS_MAX] = {