When start container with daemon model, we'll have a new daemon
process in lxcapi_start, whose c->numthreads is 2, inherited
from his father, and his father's return and lxc_container_put
won't affect son's numthreads. So when daemon stops, he only
did on lxc_container_put, the lxc_container will leak.

Actually, lxc_container_get only works for mulit-threads cases,
here we did fork, and don't need to hold container count to
protect anything, so just remove it.

Signed-off-by: Serge Hallyn <serge.hal...@ubuntu.com>
Signed-off-by: Qiang Huang <h.huangqi...@huawei.com>
---
 src/lxc/lxccontainer.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c
index 368cb46..d020918 100644
--- a/src/lxc/lxccontainer.c
+++ b/src/lxc/lxccontainer.c
@@ -589,15 +589,11 @@ static bool lxcapi_start(struct lxc_container *c, int 
useinit, char * const argv
        * while container is running...
        */
        if (daemonize) {
-               if (!lxc_container_get(c))
-                       return false;
                lxc_monitord_spawn(c->config_path);
 
                pid_t pid = fork();
-               if (pid < 0) {
-                       lxc_container_put(c);
+               if (pid < 0)
                        return false;
-               }
                if (pid != 0)
                        return wait_on_daemonized_start(c, pid);
 
@@ -639,6 +635,10 @@ reboot:
        }
 
        if (daemonize) {
+               /* When daemon was forked, it inherited parent's
+                * lxc_container, so here need a put to free
+                * lxc_container.
+                */
                lxc_container_put(c);
                exit (ret == 0 ? true : false);
        } else {
-- 
1.8.3


_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to