]> git.proxmox.com Git - mirror_lxc.git/commitdiff
pass namespace handles to the stop hook
authorWolfgang Bumiller <w.bumiller@proxmox.com>
Tue, 6 Oct 2015 08:01:05 +0000 (10:01 +0200)
committerStéphane Graber <stgraber@ubuntu.com>
Wed, 7 Oct 2015 15:38:11 +0000 (16:38 +0100)
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
src/lxc/start.c

index 56fbe43abd1f83c6e53a4bc4eefc0a76044e26a3..a294d18bd10e84588ff4ca350904f24f4e7baa79 100644 (file)
@@ -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]);