aboutsummaryrefslogtreecommitdiff
path: root/src/libexpr/eval.cc
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2011-02-09 22:59:50 +0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2011-02-09 22:59:50 +0000
commit5a6b0398026a8a24b206a4b4d43894f9c683792c (patch)
tree4ad0c552602151a329dc9cf7970f08b739c2b4f2 /src/libexpr/eval.cc
parentf1462c208ba5d4efda864875f814c268366f4803 (diff)
* Don't call GC_expand_hp unless we're actually using the garbage
collector.
Diffstat (limited to 'src/libexpr/eval.cc')
-rw-r--r--src/libexpr/eval.cc18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/libexpr/eval.cc b/src/libexpr/eval.cc
index 3ef17c36a..b95c9a6d1 100644
--- a/src/libexpr/eval.cc
+++ b/src/libexpr/eval.cc
@@ -151,6 +151,24 @@ EvalState::EvalState()
createBaseEnv();
allowUnsafeEquality = getEnv("NIX_NO_UNSAFE_EQ", "") == "";
+
+#if HAVE_BOEHMGC
+ static bool gcInitialised = true;
+ if (gcInitialised) {
+ /* Set the initial heap size to something fairly big (384 MiB)
+ so that in most cases we don't need to garbage collect at
+ all. (Collection has a fairly significant overhead.) The
+ heap size can be overriden through libgc's
+ GC_INITIAL_HEAP_SIZE environment variable. We should
+ probably also provide a nix.conf setting for this. Note
+ that GC_expand_hp() causes a lot of virtual, but not
+ physical (resident) memory to be allocated. This might be
+ a problem on systems that don't overcommit. */
+ if (!getenv("GC_INITIAL_HEAP_SIZE"))
+ GC_expand_hp(384 * 1024 * 1024);
+ gcInitialised = true;
+ }
+#endif
}