summaryrefslogtreecommitdiff
path: root/dep.h
diff options
context:
space:
mode:
authorPaul Smith <psmith@gnu.org>2005-04-13 03:16:33 +0000
committerPaul Smith <psmith@gnu.org>2005-04-13 03:16:33 +0000
commit84052f96d418a64bffc98d7936f5c129b2d50644 (patch)
tree178eec81c5e39f56db9ca4b513376b3e1c5d35bf /dep.h
parentf937439da6b2c8071475b25b3d6918a9c4145654 (diff)
downloadmake-84052f96d418a64bffc98d7936f5c129b2d50644.tar.gz
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.
Diffstat (limited to 'dep.h')
-rw-r--r--dep.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/dep.h b/dep.h
index 01c31a30..7e6a8536 100644
--- a/dep.h
+++ b/dep.h
@@ -40,6 +40,7 @@ struct dep
struct file *file;
unsigned int changed : 8;
unsigned int ignore_mtime : 1;
+ unsigned int need_2nd_expansion : 1;
};