X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fcore%2Fswap.c;h=b197eb469af266a11b5292b0524af497729b213e;hp=4e65c701fd1e35db46eecbdcd04b535161523220;hb=bf108e5541e2a3cbc6f0c59e93665eceb7a5ce05;hpb=9670d583d381d4c2c7f4d80de63bee7ad54fef44 diff --git a/src/core/swap.c b/src/core/swap.c index 4e65c701f..b197eb469 100644 --- a/src/core/swap.c +++ b/src/core/swap.c @@ -155,12 +155,12 @@ static void swap_done(Unit *u) { free(s->parameters_fragment.what); s->parameters_fragment.what = NULL; - exec_context_done(&s->exec_context, manager_is_reloading_or_reexecuting(u->manager)); + cgroup_context_done(&s->cgroup_context); + exec_context_done(&s->exec_context); + s->exec_runtime = exec_runtime_unref(s->exec_runtime); exec_command_done_array(s->exec_command, _SWAP_EXEC_COMMAND_MAX); s->control_command = NULL; - cgroup_context_done(&s->cgroup_context); - swap_unwatch_control_pid(s); s->timer_event_source = sd_event_source_unref(s->timer_event_source); @@ -625,6 +625,10 @@ static int swap_spawn(Swap *s, ExecCommand *c, pid_t *_pid) { unit_realize_cgroup(UNIT(s)); + r = unit_setup_exec_runtime(UNIT(s)); + if (r < 0) + goto fail; + r = swap_arm_timer(s); if (r < 0) goto fail; @@ -642,6 +646,7 @@ static int swap_spawn(Swap *s, ExecCommand *c, pid_t *_pid) { UNIT(s)->cgroup_path, UNIT(s)->id, NULL, + s->exec_runtime, &pid); if (r < 0) goto fail; @@ -667,7 +672,9 @@ static void swap_enter_dead(Swap *s, SwapResult f) { if (f != SWAP_SUCCESS) s->result = f; - exec_context_tmp_dirs_done(&s->exec_context); + exec_runtime_destroy(s->exec_runtime); + s->exec_runtime = exec_runtime_unref(s->exec_runtime); + swap_set_state(s, s->result != SWAP_SUCCESS ? SWAP_FAILED : SWAP_DEAD); } @@ -867,8 +874,6 @@ static int swap_serialize(Unit *u, FILE *f, FDSet *fds) { if (s->control_command_id >= 0) unit_serialize_item(u, f, "control-command", swap_exec_command_to_string(s->control_command_id)); - exec_context_serialize(&s->exec_context, UNIT(s), f); - return 0; } @@ -912,22 +917,6 @@ static int swap_deserialize_item(Unit *u, const char *key, const char *value, FD s->control_command_id = id; s->control_command = s->exec_command + id; } - } else if (streq(key, "tmp-dir")) { - char *t; - - t = strdup(value); - if (!t) - return log_oom(); - - s->exec_context.tmp_dir = t; - } else if (streq(key, "var-tmp-dir")) { - char *t; - - t = strdup(value); - if (!t) - return log_oom(); - - s->exec_context.var_tmp_dir = t; } else log_debug_unit(u->id, "Unknown serialization key '%s'", key); @@ -1193,7 +1182,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; @@ -1347,7 +1335,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; @@ -1420,6 +1407,7 @@ const UnitVTable swap_vtable = { .exec_context_offset = offsetof(Swap, exec_context), .cgroup_context_offset = offsetof(Swap, cgroup_context), .kill_context_offset = offsetof(Swap, kill_context), + .exec_runtime_offset = offsetof(Swap, exec_runtime), .sections = "Unit\0"