From: phk Date: Sat, 5 Aug 2006 15:55:34 +0000 (+0000) Subject: Plug memory leaks related to starting/stopping child. X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=86a88315e9f3520ba9d0e3d7ac885100d1523a10;p=varnish Plug memory leaks related to starting/stopping child. git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@675 d4fa192b-c00b-0410-8231-f00ffab90ce4 --- diff --git a/varnish-cache/bin/varnishd/mgt_child.c b/varnish-cache/bin/varnishd/mgt_child.c index 94b8fef9..245b786f 100644 --- a/varnish-cache/bin/varnishd/mgt_child.c +++ b/varnish-cache/bin/varnishd/mgt_child.c @@ -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])); diff --git a/varnish-cache/bin/varnishd/mgt_vcc.c b/varnish-cache/bin/varnishd/mgt_vcc.c index 3b7b8767..d9c1017f 100644 --- a/varnish-cache/bin/varnishd/mgt_vcc.c +++ b/varnish-cache/bin/varnishd/mgt_vcc.c @@ -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); }