X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;ds=sidebyside;f=src%2Fcore%2Fmount.c;h=82c64ff79b5d697be155bf54bb4d86ae30b0836b;hb=4819ff0358b6317c195fd4b1768e03d09c871070;hp=15d5f215303376c40a688f9c2dada51fdac2e591;hpb=b7def684941808600c344f0be7a2b9fcdda97e0f;p=elogind.git diff --git a/src/core/mount.c b/src/core/mount.c index 15d5f2153..82c64ff79 100644 --- a/src/core/mount.c +++ b/src/core/mount.c @@ -79,6 +79,8 @@ static void mount_init(Unit *u) { m->exec_context.std_error = u->manager->default_std_error; } + kill_context_init(&m->kill_context); + /* We need to make sure that /bin/mount is always called in * the same process group as us, so that the autofs kernel * side doesn't send us another mount request while we are @@ -529,7 +531,7 @@ static int mount_verify(Mount *m) { return -EBADMSG; } - if (m->exec_context.pam_name && m->exec_context.kill_mode != KILL_CONTROL_GROUP) { + if (m->exec_context.pam_name && m->kill_context.kill_mode != KILL_CONTROL_GROUP) { log_error("%s has PAM enabled. Kill mode must be set to 'control-group'. Refusing.", UNIT(m)->id); return -EINVAL; } @@ -631,6 +633,10 @@ static int mount_load(Unit *u) { r = mount_add_extras(m); if (r < 0) return r; + + r = unit_patch_working_directory(UNIT(m), &m->exec_context); + if (r < 0) + return r; } return mount_verify(m); @@ -779,6 +785,7 @@ static void mount_dump(Unit *u, FILE *f, const char *prefix) { prefix, (unsigned long) m->control_pid); exec_context_dump(&m->exec_context, f, prefix); + kill_context_dump(&m->kill_context, f, prefix); } static int mount_spawn(Mount *m, ExecCommand *c, pid_t *_pid) { @@ -851,10 +858,10 @@ static void mount_enter_signal(Mount *m, MountState state, MountResult f) { if (f != MOUNT_SUCCESS) m->result = f; - if (m->exec_context.kill_mode != KILL_NONE) { + if (m->kill_context.kill_mode != KILL_NONE) { int sig = (state == MOUNT_MOUNTING_SIGTERM || state == MOUNT_UNMOUNTING_SIGTERM || - state == MOUNT_REMOUNTING_SIGTERM) ? m->exec_context.kill_signal : SIGKILL; + state == MOUNT_REMOUNTING_SIGTERM) ? m->kill_context.kill_signal : SIGKILL; if (m->control_pid > 0) { if (kill_and_sigcont(m->control_pid, sig) < 0 && errno != ESRCH) @@ -864,7 +871,7 @@ static void mount_enter_signal(Mount *m, MountState state, MountResult f) { wait_for_exit = true; } - if (m->exec_context.kill_mode == KILL_CONTROL_GROUP) { + if (m->kill_context.kill_mode == KILL_CONTROL_GROUP) { if (!(pid_set = set_new(trivial_hash_func, trivial_compare_func))) { r = -ENOMEM; @@ -1323,7 +1330,7 @@ static void mount_timer_event(Unit *u, uint64_t elapsed, Watch *w) { break; case MOUNT_MOUNTING_SIGTERM: - if (m->exec_context.send_sigkill) { + if (m->kill_context.send_sigkill) { log_warning("%s mounting timed out. Killing.", u->id); mount_enter_signal(m, MOUNT_MOUNTING_SIGKILL, MOUNT_FAILURE_TIMEOUT); } else { @@ -1337,7 +1344,7 @@ static void mount_timer_event(Unit *u, uint64_t elapsed, Watch *w) { break; case MOUNT_REMOUNTING_SIGTERM: - if (m->exec_context.send_sigkill) { + if (m->kill_context.send_sigkill) { log_warning("%s remounting timed out. Killing.", u->id); mount_enter_signal(m, MOUNT_REMOUNTING_SIGKILL, MOUNT_FAILURE_TIMEOUT); } else { @@ -1351,7 +1358,7 @@ static void mount_timer_event(Unit *u, uint64_t elapsed, Watch *w) { break; case MOUNT_UNMOUNTING_SIGTERM: - if (m->exec_context.send_sigkill) { + if (m->kill_context.send_sigkill) { log_warning("%s unmounting timed out. Killing.", u->id); mount_enter_signal(m, MOUNT_UNMOUNTING_SIGKILL, MOUNT_FAILURE_TIMEOUT); } else {