X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fswap.c;h=f59b0fb18d6561d157f1a1d55bfed9f7a4786e4b;hb=8c7be95e5a80c4bd82d86e9640a071fd98618172;hp=4124f7585226b9771348e521412b22d34e24671c;hpb=0a494f1ff323ef36b7acc637c198fdfa240c2bb2;p=elogind.git diff --git a/src/swap.c b/src/swap.c index 4124f7585..f59b0fb18 100644 --- a/src/swap.c +++ b/src/swap.c @@ -177,6 +177,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) @@ -264,6 +265,8 @@ static int swap_load(Unit *u) { return r; if (u->meta.load_state == UNIT_LOADED) { + if ((r = unit_add_exec_dependencies(u, &s->exec_context)) < 0) + return r; if (s->meta.fragment_path) s->from_fragment = true; @@ -657,9 +660,9 @@ 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->exec_context.kill_mode == KILL_PROCESS_GROUP ? + -s->control_pid : + s->control_pid, sig) < 0 && errno != ESRCH) log_warning("Failed to kill control process %li: %m", (long) s->control_pid); else @@ -678,7 +681,7 @@ 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) @@ -1298,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; }