[lxc-devel] [RFC 5/5] pass namespace handles to the stop hook
Wolfgang Bumiller
w.bumiller at proxmox.com
Wed Sep 23 14:12:10 UTC 2015
---
src/lxc/start.c | 20 ++++++++++++++++++--
1 file changed, 18 insertions(+), 2 deletions(-)
diff --git a/src/lxc/start.c b/src/lxc/start.c
index a1eb961..7a909de 100644
--- a/src/lxc/start.c
+++ b/src/lxc/start.c
@@ -486,15 +486,31 @@ out_free:
void lxc_fini(const char *name, struct lxc_handler *handler)
{
- int i;
+ int i, rc;
+ pid_t self = getpid();
+ char **namespaces = (char**)malloc((LXC_NS_MAX+1) * sizeof(char*));
+ 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;
+ }
+ }
+ }
+ 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]);
--
2.1.4
More information about the lxc-devel
mailing list