[lxc-devel] [PATCH 1/3] lxc-start: fix the container leak when daemonize
Serge Hallyn
serge.hallyn at ubuntu.com
Thu Jan 23 00:27:21 UTC 2014
Quoting Qiang Huang (h.huangqiang at huawei.com):
> 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.hallyn at ubuntu.com>
No,
> Signed-off-by: Qiang Huang <h.huangqiang at 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);
Why did you change this in my patch? Since we have removed the
lxc_container_get() at the top of this patch, the matching put
should also be removed.
I'm going to go ahead an apply my original patch
(https://lists.linuxcontainers.org/pipermail/lxc-devel/2014-January/007343.html)
If you think there is an error in that logic, it'll be easier
to reason about as a separate patch on top of mine.
> exit (ret == 0 ? true : false);
> } else {
> --
> 1.8.3
>
>
More information about the lxc-devel
mailing list