X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fcore%2Fswap.c;h=d53cabef2a5281a66c3ebabef9ecf6033e310b39;hp=1d02eb2978923f83bd1f7bcb9d3d5653e11a70dc;hb=e10c9985bbc3cf79f12f9ec7317adfe697fa8214;hpb=613b411c947635136637f8cdd66b94512f761eab diff --git a/src/core/swap.c b/src/core/swap.c index 1d02eb297..d53cabef2 100644 --- a/src/core/swap.c +++ b/src/core/swap.c @@ -645,6 +645,7 @@ static int swap_spawn(Swap *s, ExecCommand *c, pid_t *_pid) { UNIT(s)->manager->cgroup_supported, UNIT(s)->cgroup_path, UNIT(s)->id, + 0, NULL, s->exec_runtime, &pid); @@ -711,7 +712,11 @@ static void swap_enter_signal(Swap *s, SwapState state, SwapResult f) { goto fail; swap_set_state(s, state); - } else + } else if (state == SWAP_ACTIVATING_SIGTERM) + swap_enter_signal(s, SWAP_ACTIVATING_SIGKILL, SWAP_SUCCESS); + else if (state == SWAP_DEACTIVATING_SIGTERM) + swap_enter_signal(s, SWAP_DEACTIVATING_SIGKILL, SWAP_SUCCESS); + else swap_enter_dead(s, SWAP_SUCCESS); return; @@ -998,10 +1003,7 @@ static void swap_sigchld_event(Unit *u, pid_t pid, int code, int status) { case SWAP_DEACTIVATING_SIGKILL: case SWAP_DEACTIVATING_SIGTERM: - if (f == SWAP_SUCCESS) - swap_enter_dead(s, f); - else - swap_enter_dead(s, f); + swap_enter_dead(s, f); break; default: @@ -1182,7 +1184,6 @@ static int swap_dispatch_io(sd_event_source *source, int fd, uint32_t revents, v } static Unit *swap_following(Unit *u) { - _cleanup_free_ char *p = NULL; Swap *s = SWAP(u); Swap *other, *first = NULL; @@ -1336,7 +1337,6 @@ int swap_process_new_device(Manager *m, struct udev_device *dev) { } int swap_process_removed_device(Manager *m, struct udev_device *dev) { - _cleanup_free_ char *e = NULL; const char *dn; int r = 0; Swap *s; @@ -1371,6 +1371,20 @@ static int swap_kill(Unit *u, KillWho who, int signo, sd_bus_error *error) { return unit_kill_common(u, who, signo, -1, SWAP(u)->control_pid, error); } +static int swap_get_timeout(Unit *u, uint64_t *timeout) { + Swap *s = SWAP(u); + int r; + + if (!s->timer_event_source) + return 0; + + r = sd_event_source_get_time(s->timer_event_source, timeout); + if (r < 0) + return r; + + return 1; +} + static const char* const swap_state_table[_SWAP_STATE_MAX] = { [SWAP_DEAD] = "dead", [SWAP_ACTIVATING] = "activating", @@ -1433,6 +1447,8 @@ const UnitVTable swap_vtable = { .kill = swap_kill, + .get_timeout = swap_get_timeout, + .serialize = swap_serialize, .deserialize_item = swap_deserialize_item, @@ -1447,7 +1463,6 @@ const UnitVTable swap_vtable = { .bus_interface = "org.freedesktop.systemd1.Swap", .bus_vtable = bus_swap_vtable, - .bus_changing_properties = bus_swap_changing_properties, .bus_set_property = bus_swap_set_property, .bus_commit_properties = bus_swap_commit_properties,