From 49ee105c685cb84bc3057e8b7666fc0cc7090047 Mon Sep 17 00:00:00 2001 From: Paul Smith Date: Wed, 13 Apr 2005 03:16:33 +0000 Subject: Fix performance degradation introduced by the second expansion feature. I did this by adding intelligence into the algorithm such that the second expansion was only actually performed when the prerequisite list contained at least one "$", so we knew it is actually needed. Without this we were using up a LOT more memory, since every single target (even ones never used by make) had their file variables initialized. This also used a lot more CPU, since we needed to create and populate a new variable hash table for every target. There is one issue remaining with this feature: it leaks memory. In pattern_search() we now initialize the file variables for every pattern target, which allocates a hash table, etc. However, sometimes we recursively invoke pattern_search() (for intermediate files) with an automatic variable (alloca() I believe) as the file. When that function returns, obviously, the file variable hash memory is lost. --- rule.c | 1 + 1 file changed, 1 insertion(+) (limited to 'rule.c') diff --git a/rule.c b/rule.c index dd0ebcb..152e7e6 100644 --- a/rule.c +++ b/rule.c @@ -206,6 +206,7 @@ convert_suffix_rule (char *target, char *source, struct commands *cmds) deps->next = 0; deps->name = depname; deps->ignore_mtime = 0; + deps->need_2nd_expansion = 0; } create_pattern_rule (names, percents, 0, deps, cmds, 0); -- cgit v1.2.3