diff options
author | Michal Schmidt <mschmidt@redhat.com> | 2013-03-02 22:31:09 +0100 |
---|---|---|
committer | Michal Schmidt <mschmidt@redhat.com> | 2013-03-13 17:21:53 +0100 |
commit | 814cc562121270e2d5de0630b773792c74990a9c (patch) | |
tree | b876a03c864b775b4926c20d5a6032d6a584f8ba /src/core/mount.c | |
parent | util, manager: and mempset() and use it (diff) | |
download | systemd-814cc562121270e2d5de0630b773792c74990a9c.tar.xz systemd-814cc562121270e2d5de0630b773792c74990a9c.zip |
core: single unit_kill implementation for all unit types
There are very few differences in the implementations of the kill method in the
unit types that have one. Let's unify them.
This does not yet unify unit_kill() with unit_kill_context().
Diffstat (limited to 'src/core/mount.c')
-rw-r--r-- | src/core/mount.c | 48 |
1 files changed, 1 insertions, 47 deletions
diff --git a/src/core/mount.c b/src/core/mount.c index 895aa25371..73a7832430 100644 --- a/src/core/mount.c +++ b/src/core/mount.c @@ -1781,53 +1781,7 @@ static void mount_reset_failed(Unit *u) { } static int mount_kill(Unit *u, KillWho who, int signo, DBusError *error) { - Mount *m = MOUNT(u); - int r = 0; - Set *pid_set = NULL; - - assert(m); - - if (who == KILL_MAIN) { - dbus_set_error(error, BUS_ERROR_NO_SUCH_PROCESS, "Mount units have no main processes"); - return -ESRCH; - } - - if (m->control_pid <= 0 && who == KILL_CONTROL) { - dbus_set_error(error, BUS_ERROR_NO_SUCH_PROCESS, "No control process to kill"); - return -ESRCH; - } - - if (who == KILL_CONTROL || who == KILL_ALL) - if (m->control_pid > 0) - if (kill(m->control_pid, signo) < 0) - r = -errno; - - if (who == KILL_ALL) { - int q; - - pid_set = set_new(trivial_hash_func, trivial_compare_func); - if (!pid_set) - return -ENOMEM; - - /* Exclude the control pid from being killed via the cgroup */ - if (m->control_pid > 0) { - q = set_put(pid_set, LONG_TO_PTR(m->control_pid)); - if (q < 0) { - r = q; - goto finish; - } - } - - q = cgroup_bonding_kill_list(UNIT(m)->cgroup_bondings, signo, false, false, pid_set, NULL); - if (q < 0 && q != -EAGAIN && q != -ESRCH && q != -ENOENT) - r = q; - } - -finish: - if (pid_set) - set_free(pid_set); - - return r; + return unit_kill_common(u, who, signo, -1, MOUNT(u)->control_pid, error); } static const char* const mount_state_table[_MOUNT_STATE_MAX] = { |