Module Name:    src
Committed By:   rillig
Date:           Mon Dec 13 01:00:11 UTC 2021

Modified Files:
        src/usr.bin/make: var.c

Log Message:
make: fix memory leak when evaluating ${.SUFFIXES} (since yesterday)

perl -e '
    printf(".SUFFIXES: %s\n", "x" x 224);
    printf("_:=\${.SUFFIXES}\n" x 100_000);
    printf("all:\n");
' \
| MALLOC_CONF=stats_print:true \
    ./make -r -f - 2>&1 \
| awk '/bins:/,/^ *256/ { print $1 "\t" $4}'

Roughly 100000 less allocations for bin size 16, for the variable name.


To generate a diff of this commit:
cvs rdiff -u -r1.974 -r1.975 src/usr.bin/make/var.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.bin/make/var.c
diff -u src/usr.bin/make/var.c:1.974 src/usr.bin/make/var.c:1.975
--- src/usr.bin/make/var.c:1.974	Mon Dec 13 00:33:33 2021
+++ src/usr.bin/make/var.c	Mon Dec 13 01:00:10 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: var.c,v 1.974 2021/12/13 00:33:33 rillig Exp $	*/
+/*	$NetBSD: var.c,v 1.975 2021/12/13 01:00:10 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -140,7 +140,7 @@
 #include "metachar.h"
 
 /*	"@(#)var.c	8.3 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: var.c,v 1.974 2021/12/13 00:33:33 rillig Exp $");
+MAKE_RCSID("$NetBSD: var.c,v 1.975 2021/12/13 01:00:10 rillig Exp $");
 
 /*
  * Variables are defined using one of the VAR=value assignments.  Their
@@ -4407,7 +4407,8 @@ ParseVarnameLong(
 
 	if (v == NULL && Substring_Equals(name, ".SUFFIXES")) {
 		char *suffixes = Suff_NamesStr();
-		v = VarNew(Substring_Str(name), suffixes, false, true);
+		v = VarNew(FStr_InitRefer(".SUFFIXES"), suffixes,
+		    false, true);
 		free(suffixes);
 	} else if (v == NULL)
 		v = FindLocalLegacyVar(name, scope, out_true_extraModifiers);

Reply via email to