chiark / gitweb /
machined: fix Kill() bus call on machine objects when "what" is specified as "leader"
authorLennart Poettering <lennart@poettering.net>
Tue, 18 Mar 2014 03:43:08 +0000 (04:43 +0100)
committerLennart Poettering <lennart@poettering.net>
Tue, 18 Mar 2014 03:48:26 +0000 (04:48 +0100)
src/machine/machine.c
src/machine/machined-dbus.c
src/machine/machined.h

index 4596a80838f6bd8f751110715f45c9e66696910c..9a5cc9a63c4eb1f017d0c8a2196c14ec6ce9c833 100644 (file)
@@ -410,7 +410,15 @@ int machine_kill(Machine *m, KillWho who, int signo) {
         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] = {
index 09d28bbb3398554f0910e1e1551bcad4dcc0a809..947310542c7eec1f1cf19f9a4c425d7a7d6bd84e 100644 (file)
@@ -655,7 +655,7 @@ int manager_stop_unit(Manager *manager, const char *unit, sd_bus_error *error, c
         return 1;
 }
 
-int manager_kill_unit(Manager *manager, const char *unit, KillWho who, int signo, sd_bus_error *error) {
+int manager_kill_unit(Manager *manager, const char *unit, int signo, sd_bus_error *error) {
         assert(manager);
         assert(unit);
 
@@ -667,7 +667,7 @@ int manager_kill_unit(Manager *manager, const char *unit, KillWho who, int signo
                         "KillUnit",
                         error,
                         NULL,
-                        "ssi", unit, who == KILL_LEADER ? "main" : "all", signo);
+                        "ssi", unit, "all", signo);
 }
 
 int manager_unit_is_active(Manager *manager, const char *unit) {
index d4b581be7a9c4ed3c83de4e85e89ce8ce9c9f51c..2dba303dfcd060bd63557c40938228e6e25e02cb 100644 (file)
@@ -67,6 +67,6 @@ int match_job_removed(sd_bus *bus, sd_bus_message *message, void *userdata, sd_b
 
 int manager_start_scope(Manager *manager, const char *scope, pid_t pid, const char *slice, const char *description, sd_bus_message *more_properties, sd_bus_error *error, char **job);
 int manager_stop_unit(Manager *manager, const char *unit, sd_bus_error *error, char **job);
-int manager_kill_unit(Manager *manager, const char *unit, KillWho who, int signo, sd_bus_error *error);
+int manager_kill_unit(Manager *manager, const char *unit, int signo, sd_bus_error *error);
 int manager_unit_is_active(Manager *manager, const char *unit);
 int manager_job_is_active(Manager *manager, const char *path);