From: Roy Marples Date: Sat, 4 Oct 2014 08:22:09 +0000 (+0000) Subject: Free control memory on fork X-Git-Tag: v6.5.0~9 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1ef1d5b92e214ad010fb4579f80f36918e47641b;p=thirdparty%2Fdhcpcd.git Free control memory on fork --- diff --git a/control.c b/control.c index 5c655806..c92a8e54 100644 --- a/control.c +++ b/control.c @@ -298,6 +298,9 @@ control_stop(struct dhcpcd_ctx *ctx) int retval = 0; struct fd_list *l; + if (ctx->options & DHCPCD_FORKED) + goto freeit; + if (ctx->control_fd == -1) return 0; eloop_event_delete(ctx->eloop, ctx->control_fd, 0); @@ -314,6 +317,7 @@ control_stop(struct dhcpcd_ctx *ctx) retval = -1; } +freeit: while ((l = TAILQ_FIRST(&ctx->control_fds))) { TAILQ_REMOVE(&ctx->control_fds, l, next); eloop_event_delete(ctx->eloop, l->fd, 0); diff --git a/dhcpcd.c b/dhcpcd.c index 69af3e29..e15b5335 100644 --- a/dhcpcd.c +++ b/dhcpcd.c @@ -1726,7 +1726,7 @@ exit1: ipv4_ctxfree(&ctx); ipv6_ctxfree(&ctx); dev_stop(&ctx, !(ctx.options & DHCPCD_FORKED)); - if (!(ctx.options & DHCPCD_FORKED) && control_stop(&ctx) == -1) + if (control_stop(&ctx) == -1) syslog(LOG_ERR, "control_stop: %m:"); if (ctx.pid_fd != -1) { close(ctx.pid_fd);