diff options
author | 2012-03-19 00:31:40 +0100 | |
---|---|---|
committer | 2012-03-19 00:31:40 +0100 | |
commit | 69182a318c3ba35f56a88891cabad25d9f7985b6 (patch) | |
tree | a8da72b063c2c71c00dbb3aa4a52991a04f0b33a | |
parent | fix cached rootfs update* fix rootfs path* add handling of systemd (diff) | |
download | lxc-69182a318c3ba35f56a88891cabad25d9f7985b6.tar.gz lxc-69182a318c3ba35f56a88891cabad25d9f7985b6.tar.bz2 lxc-69182a318c3ba35f56a88891cabad25d9f7985b6.zip |
do check for utmp checking at the right time
We were doing the check for whether we need to watch utmp from a
thread cloned from that which will actually do the utmp watching.
As a result, the utmp file was always being watched, even if it
didn't need to be.
Move the check to the parent thread.
Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/lxc/+bug/948623
Signed-off-by: Serge Hallyn <serge.hallyn@canonical.com>
Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com>
-rw-r--r-- | src/lxc/start.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/lxc/start.c b/src/lxc/start.c index fc2a1b1..7af1e37 100644 --- a/src/lxc/start.c +++ b/src/lxc/start.c @@ -503,16 +503,12 @@ static int do_start(void *data) if (lxc_sync_barrier_parent(handler, LXC_SYNC_CONFIGURE)) return -1; - if (must_drop_cap_sys_boot()) { + if (handler->conf->need_utmp_watch) { if (prctl(PR_CAPBSET_DROP, CAP_SYS_BOOT, 0, 0, 0)) { SYSERROR("failed to remove CAP_SYS_BOOT capability"); return -1; } - handler->conf->need_utmp_watch = 1; DEBUG("Dropped cap_sys_boot\n"); - } else { - DEBUG("Not dropping cap_sys_boot or watching utmp\n"); - handler->conf->need_utmp_watch = 0; } /* Setup the container, ip, names, utsname, ... */ @@ -635,6 +631,14 @@ int __lxc_start(const char *name, struct lxc_conf *conf, handler->ops = ops; handler->data = data; + if (must_drop_cap_sys_boot()) { + handler->conf->need_utmp_watch = 1; + DEBUG("Dropping cap_sys_boot and watching utmp\n"); + } else { + DEBUG("Not dropping cap_sys_boot or watching utmp\n"); + handler->conf->need_utmp_watch = 0; + } + err = lxc_spawn(handler); if (err) { ERROR("failed to spawn '%s'", name); |