From: Wolfgang Bumiller Date: Tue, 6 Oct 2015 08:01:05 +0000 (+0200) Subject: pass namespace handles to the stop hook X-Git-Tag: lxc-2.0.0.beta1~99 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b3286b628b2a178d2f775a6d75ef1c0e7fe75ca6;p=thirdparty%2Flxc.git pass namespace handles to the stop hook Signed-off-by: Wolfgang Bumiller Acked-by: Serge E. Hallyn --- diff --git a/src/lxc/start.c b/src/lxc/start.c index 56fbe43ab..a294d18bd 100644 --- a/src/lxc/start.c +++ b/src/lxc/start.c @@ -486,15 +486,32 @@ out_free: void lxc_fini(const char *name, struct lxc_handler *handler) { - int i; + int i, rc; + pid_t self = getpid(); + char *namespaces[LXC_NS_MAX+1]; + size_t namespace_count = 0; /* The STOPPING state is there for future cleanup code * which can take awhile */ lxc_set_state(name, handler, STOPPING); - if (run_lxc_hooks(name, "stop", handler->conf, handler->lxcpath, NULL)) + for (i = 0; i < LXC_NS_MAX; i++) { + if (handler->nsfd[i] != -1) { + rc = asprintf(&namespaces[namespace_count], "%s:/proc/%d/fd/%d", + ns_info[i].proc_name, self, handler->nsfd[i]); + if (rc == -1) { + SYSERROR("failed to allocate memory"); + break; + } + ++namespace_count; + } + } + namespaces[namespace_count] = NULL; + if (run_lxc_hooks(name, "stop", handler->conf, handler->lxcpath, namespaces)) ERROR("failed to run stop hooks for container '%s'.", name); + while (namespace_count--) + free(namespaces[namespace_count]); for (i = 0; i < LXC_NS_MAX; i++) { if (handler->nsfd[i] != -1) { close(handler->nsfd[i]);