]> err.no Git - varnish/commitdiff
Plug memory leaks related to starting/stopping child.
authorphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Sat, 5 Aug 2006 15:55:34 +0000 (15:55 +0000)
committerphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Sat, 5 Aug 2006 15:55:34 +0000 (15:55 +0000)
git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@675 d4fa192b-c00b-0410-8231-f00ffab90ce4

varnish-cache/bin/varnishd/mgt_child.c
varnish-cache/bin/varnishd/mgt_vcc.c

index 94b8fef9ed2f6603dc624ad064b83de67af1874d..245b786f02318c22da467a0e01207ca6ac14665c 100644 (file)
@@ -125,6 +125,7 @@ start_child(void)
        AZ(close(child_fds[1]));
        child_fds[1] = -1;
 
+       assert(ev_listen == NULL);
        e = ev_new();
        assert(e != NULL);
        e->fd = child_fds[0];
@@ -134,6 +135,7 @@ start_child(void)
        AZ(ev_add(mgt_evb, e));
        ev_listen = e;
 
+       assert(ev_poker == NULL);
        e = ev_new();
        assert(e != NULL);
        e->timeout = 3.0;
@@ -167,8 +169,10 @@ stop_child(void)
 
        child_state = CH_STOPPING;
 
-       if (ev_poker != NULL)
+       if (ev_poker != NULL) {
                ev_del(mgt_evb, ev_poker);
+               free(ev_poker);
+       }
        ev_poker = NULL;
 
        printf("Clean child\n");
@@ -194,8 +198,10 @@ mgt_sigchld(struct ev *e, int what)
        (void)e;
        (void)what;
 
-       if (ev_poker != NULL)
+       if (ev_poker != NULL) {
                ev_del(mgt_evb, ev_poker);
+               free(ev_poker);
+       }
        ev_poker = NULL;
 
        r = wait4(-1, &status, WNOHANG, NULL);
@@ -219,8 +225,10 @@ mgt_sigchld(struct ev *e, int what)
                heritage.fds[3] = -1;
        }
 
-       if (ev_listen != NULL)
+       if (ev_listen != NULL) {
                ev_del(mgt_evb, ev_listen);
+               free(ev_listen);
+       }
        ev_listen = NULL;
 
        AZ(close(child_fds[0]));
index 3b7b8767168073bc700d4cb935c61ea3e7f0c470..d9c1017f65ca7ef5e077e3992bfbcdb9bccd9646 100644 (file)
@@ -178,13 +178,17 @@ mgt_push_vcls_and_start(unsigned *status, char **p)
                if (mgt_cli_askchild(status, p,
                    "config.load %s %s\n", vp->name, vp->fname))
                        return (1);
-               if (vp->active)
-               if (mgt_cli_askchild(status, p,
+               free(*p);
+               if (vp->active &&
+                   mgt_cli_askchild(status, p,
                    "config.use %s\n", vp->name, vp->fname))
                        return (1);
+               free(*p);
        }
        if (mgt_cli_askchild(status, p, "start\n"))
                return (1);
+       free(*p);
+       *p = NULL;
        return (0);
 }