summaryrefslogtreecommitdiff
path: root/src/core/socket.c
diff options
context:
space:
mode:
authorMichal Schmidt <mschmidt@redhat.com>2013-03-02 22:31:09 +0100
committerMichal Schmidt <mschmidt@redhat.com>2013-03-13 17:21:53 +0100
commit814cc562121270e2d5de0630b773792c74990a9c (patch)
treeb876a03c864b775b4926c20d5a6032d6a584f8ba /src/core/socket.c
parent6282c859bdc6463cb25734dcfd3cf8628d951088 (diff)
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/socket.c')
-rw-r--r--src/core/socket.c48
1 files changed, 1 insertions, 47 deletions
diff --git a/src/core/socket.c b/src/core/socket.c
index 2105369018..ee9de4e14c 100644
--- a/src/core/socket.c
+++ b/src/core/socket.c
@@ -2265,53 +2265,7 @@ static void socket_reset_failed(Unit *u) {
}
static int socket_kill(Unit *u, KillWho who, int signo, DBusError *error) {
- Socket *s = SOCKET(u);
- int r = 0;
- Set *pid_set = NULL;
-
- assert(s);
-
- if (who == KILL_MAIN) {
- dbus_set_error(error, BUS_ERROR_NO_SUCH_PROCESS, "Socket units have no main processes");
- return -ESRCH;
- }
-
- if (s->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 (s->control_pid > 0)
- if (kill(s->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 (s->control_pid > 0) {
- q = set_put(pid_set, LONG_TO_PTR(s->control_pid));
- if (q < 0) {
- r = q;
- goto finish;
- }
- }
-
- q = cgroup_bonding_kill_list(UNIT(s)->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, SOCKET(u)->control_pid, error);
}
static const char* const socket_state_table[_SOCKET_STATE_MAX] = {