X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fswap.c;h=c32f60810c0f17444d12861e7080c4e10ed16bac;hp=db0614b9f9a488d8ba2620d638c724a7ef685074;hb=67370238b55df4126e505007d46deaff8bb55a36;hpb=27abbe8251a2614aab549a7a83f752e92d971a6a diff --git a/src/swap.c b/src/swap.c index db0614b9f..c32f60810 100644 --- a/src/swap.c +++ b/src/swap.c @@ -37,6 +37,7 @@ #include "special.h" #include "bus-errors.h" #include "exit-status.h" +#include "def.h" static const UnitActiveState state_translation_table[_SWAP_STATE_MAX] = { [SWAP_DEAD] = UNIT_INACTIVE, @@ -177,6 +178,7 @@ static int swap_add_target_links(Swap *s) { return r; if (!p->noauto && + !p->nofail && (p->handle || s->meta.manager->swap_auto) && s->from_etc_fstab && s->meta.manager->running_as == MANAGER_SYSTEM) @@ -659,9 +661,7 @@ static void swap_enter_signal(Swap *s, SwapState state, bool success) { state == SWAP_DEACTIVATING_SIGTERM) ? s->exec_context.kill_signal : SIGKILL; if (s->control_pid > 0) { - if (kill(s->exec_context.kill_mode == KILL_PROCESS_GROUP ? - -s->control_pid : - s->control_pid, sig) < 0 && errno != ESRCH) + if (kill_and_sigcont(s->control_pid, sig) < 0 && errno != ESRCH) log_warning("Failed to kill control process %li: %m", (long) s->control_pid); else @@ -680,13 +680,14 @@ static void swap_enter_signal(Swap *s, SwapState state, bool success) { if ((r = set_put(pid_set, LONG_TO_PTR(s->control_pid))) < 0) goto fail; - if ((r = cgroup_bonding_kill_list(s->meta.cgroup_bondings, sig, pid_set)) < 0) { + if ((r = cgroup_bonding_kill_list(s->meta.cgroup_bondings, sig, true, pid_set)) < 0) { if (r != -EAGAIN && r != -ESRCH && r != -ENOENT) log_warning("Failed to kill control group: %s", strerror(-r)); } else if (r > 0) wait_for_exit = true; set_free(pid_set); + pid_set = NULL; } } @@ -1284,7 +1285,7 @@ static int swap_kill(Unit *u, KillWho who, KillMode mode, int signo, DBusError * } if (s->control_pid > 0) - if (kill(mode == KILL_PROCESS_GROUP ? -s->control_pid : s->control_pid, signo) < 0) + if (kill(s->control_pid, signo) < 0) r = -errno; if (mode == KILL_CONTROL_GROUP) { @@ -1300,7 +1301,7 @@ static int swap_kill(Unit *u, KillWho who, KillMode mode, int signo, DBusError * goto finish; } - if ((q = cgroup_bonding_kill_list(s->meta.cgroup_bondings, signo, pid_set)) < 0) + if ((q = cgroup_bonding_kill_list(s->meta.cgroup_bondings, signo, false, pid_set)) < 0) if (r != -EAGAIN && r != -ESRCH && r != -ENOENT) r = q; }