core: unify kill code of mount, service, socket, swap units
This commit is contained in:
+10
-44
@@ -1288,54 +1288,23 @@ fail:
|
||||
|
||||
static void socket_enter_signal(Socket *s, SocketState state, SocketResult f) {
|
||||
int r;
|
||||
Set *pid_set = NULL;
|
||||
bool wait_for_exit = false;
|
||||
|
||||
assert(s);
|
||||
|
||||
if (f != SOCKET_SUCCESS)
|
||||
s->result = f;
|
||||
|
||||
if (s->kill_context.kill_mode != KILL_NONE) {
|
||||
int sig = (state == SOCKET_STOP_PRE_SIGTERM || state == SOCKET_FINAL_SIGTERM) ? s->kill_context.kill_signal : SIGKILL;
|
||||
r = unit_kill_context(
|
||||
UNIT(s),
|
||||
&s->kill_context,
|
||||
state != SOCKET_STOP_PRE_SIGTERM && state != SOCKET_FINAL_SIGTERM,
|
||||
-1,
|
||||
s->control_pid,
|
||||
false);
|
||||
if (r < 0)
|
||||
goto fail;
|
||||
|
||||
if (s->control_pid > 0) {
|
||||
if (kill_and_sigcont(s->control_pid, sig) < 0 && errno != ESRCH)
|
||||
|
||||
log_warning_unit(UNIT(s)->id,
|
||||
"Failed to kill control process %li: %m",
|
||||
(long) s->control_pid);
|
||||
else
|
||||
wait_for_exit = true;
|
||||
}
|
||||
|
||||
if (s->kill_context.kill_mode == KILL_CONTROL_GROUP) {
|
||||
|
||||
if (!(pid_set = set_new(trivial_hash_func, trivial_compare_func))) {
|
||||
r = -ENOMEM;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
/* Exclude the control pid from being killed via the cgroup */
|
||||
if (s->control_pid > 0)
|
||||
if ((r = set_put(pid_set, LONG_TO_PTR(s->control_pid))) < 0)
|
||||
goto fail;
|
||||
|
||||
r = cgroup_bonding_kill_list(UNIT(s)->cgroup_bondings, sig, true, false, pid_set, NULL);
|
||||
if (r < 0) {
|
||||
if (r != -EAGAIN && r != -ESRCH && r != -ENOENT)
|
||||
log_warning_unit(UNIT(s)->id,
|
||||
"Failed to kill control group: %s",
|
||||
strerror(-r));
|
||||
} else if (r > 0)
|
||||
wait_for_exit = true;
|
||||
|
||||
set_free(pid_set);
|
||||
pid_set = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if (wait_for_exit) {
|
||||
if (r > 0) {
|
||||
r = unit_watch_timer(UNIT(s), CLOCK_MONOTONIC, true, s->timeout_usec, &s->timer_watch);
|
||||
if (r < 0)
|
||||
goto fail;
|
||||
@@ -1357,9 +1326,6 @@ fail:
|
||||
socket_enter_stop_post(s, SOCKET_FAILURE_RESOURCES);
|
||||
else
|
||||
socket_enter_dead(s, SOCKET_FAILURE_RESOURCES);
|
||||
|
||||
if (pid_set)
|
||||
set_free(pid_set);
|
||||
}
|
||||
|
||||
static void socket_enter_stop_pre(Socket *s, SocketResult f) {
|
||||
|
||||
Reference in New Issue
Block a user