[master] aeead7e77 Plug minor leak

Dridi Boukelmoune dridi.boukelmoune at gmail.com
Thu Dec 26 18:17:05 UTC 2019


commit aeead7e77f542762fe171e7f7dd142dddc056e62
Author: Dridi Boukelmoune <dridi.boukelmoune at gmail.com>
Date:   Thu Dec 26 19:00:03 2019 +0100

    Plug minor leak

diff --git a/bin/varnishd/mgt/mgt_param.c b/bin/varnishd/mgt/mgt_param.c
index 03d707ee6..4eaecfae5 100644
--- a/bin/varnishd/mgt/mgt_param.c
+++ b/bin/varnishd/mgt/mgt_param.c
@@ -575,16 +575,47 @@ MCF_AddParams(struct parspec *ps)
  */
 
 static void
-mcf_wash_param(struct cli *cli, const struct parspec *pp, const char **val,
+mcf_dyn_vsb(enum mcf_which_e which, struct parspec *pp, struct vsb *vsb)
+{
+
+	switch (which) {
+	case MCF_DEFAULT:
+		REPLACE(pp->dyn_def, VSB_data(vsb));
+		pp->def = pp->dyn_def;
+		break;
+	case MCF_MINIMUM:
+		REPLACE(pp->dyn_min, VSB_data(vsb));
+		pp->min = pp->dyn_min;
+		break;
+	case MCF_MAXIMUM:
+		REPLACE(pp->dyn_max, VSB_data(vsb));
+		pp->max = pp->dyn_max;
+		break;
+	default:
+		WRONG("bad 'which'");
+	}
+}
+
+static void
+mcf_wash_param(struct cli *cli, struct parspec *pp, enum mcf_which_e which,
     const char *name, struct vsb *vsb)
 {
+	const char *val;
 	int err;
 
-	AN(*val);
+	switch (which) {
+	case MCF_DEFAULT: val = pp->def; break;
+	case MCF_MINIMUM: val = pp->min; break;
+	case MCF_MAXIMUM: val = pp->max; break;
+	default:
+		WRONG("bad 'which'");
+	}
+	AN(val);
+
 	VSB_clear(vsb);
 	VSB_printf(vsb, "FAILED to set %s for param %s: %s\n",
-	    name, pp->name, *val);
-	err = pp->func(vsb, pp, *val);
+	    name, pp->name, val);
+	err = pp->func(vsb, pp, val);
 	AZ(VSB_finish(vsb));
 	if (err) {
 		VCLI_Out(cli, "%s\n", VSB_data(vsb));
@@ -595,10 +626,8 @@ mcf_wash_param(struct cli *cli, const struct parspec *pp, const char **val,
 	err = pp->func(vsb, pp, NULL);
 	AZ(err);
 	AZ(VSB_finish(vsb));
-	if (strcmp(*val, VSB_data(vsb))) {
-		*val = strdup(VSB_data(vsb));
-		AN(*val);
-	}
+	if (strcmp(val, VSB_data(vsb)))
+		mcf_dyn_vsb(which, pp, vsb);
 }
 
 /*--------------------------------------------------------------------*/
@@ -679,11 +708,11 @@ MCF_InitParams(struct cli *cli)
 		if (pp->flags & NOT_IMPLEMENTED)
 			continue;
 		if (pp->min != NULL)
-			mcf_wash_param(cli, pp, &pp->min, "minimum", vsb);
+			mcf_wash_param(cli, pp, MCF_MINIMUM, "minimum", vsb);
 		if (pp->max != NULL)
-			mcf_wash_param(cli, pp, &pp->max, "maximum", vsb);
+			mcf_wash_param(cli, pp, MCF_MAXIMUM, "maximum", vsb);
 		AN(pp->def);
-		mcf_wash_param(cli, pp, &pp->def, "default", vsb);
+		mcf_wash_param(cli, pp, MCF_DEFAULT, "default", vsb);
 	}
 	VSB_destroy(&vsb);
 }
@@ -706,22 +735,7 @@ MCF_ParamConf(enum mcf_which_e which, const char * const param,
 	VSB_vprintf(vsb, fmt, ap);
 	va_end(ap);
 	AZ(VSB_finish(vsb));
-	switch (which) {
-	case MCF_DEFAULT:
-		REPLACE(pp->dyn_def, VSB_data(vsb));
-		pp->def = pp->dyn_def;
-		break;
-	case MCF_MINIMUM:
-		REPLACE(pp->dyn_min, VSB_data(vsb));
-		pp->min = pp->dyn_min;
-		break;
-	case MCF_MAXIMUM:
-		REPLACE(pp->dyn_max, VSB_data(vsb));
-		pp->max = pp->dyn_max;
-		break;
-	default:
-		WRONG("bad 'which'");
-	}
+	mcf_dyn_vsb(which, pp, vsb);
 	VSB_delete(vsb);
 }
 
diff --git a/tools/lsan.suppr b/tools/lsan.suppr
index 03abb5f9c..485d27703 100644
--- a/tools/lsan.suppr
+++ b/tools/lsan.suppr
@@ -1,9 +1,5 @@
 # varnishtest
 leak:varnishtest
-# pp->{def,min,max}
-leak:MCF_ParamConf
-# pp->{def,min,max}
-leak:mcf_wash_param
 # av
 leak:STV_Config
 # av


More information about the varnish-commit mailing list