about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/libexpr/eval.cc18
-rw-r--r--src/libmain/shared.cc12
2 files changed, 18 insertions, 12 deletions
diff --git a/src/libexpr/eval.cc b/src/libexpr/eval.cc
index 3ef17c36a2..b95c9a6d17 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
 }
 
 
diff --git a/src/libmain/shared.cc b/src/libmain/shared.cc
index 68f1458203..3110c94523 100644
--- a/src/libmain/shared.cc
+++ b/src/libmain/shared.cc
@@ -356,18 +356,6 @@ int main(int argc, char * * argv)
     GC_INIT();
 
     GC_oom_fn = oomHandler;
-
-    /* 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, some.)  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);
 #endif
 
     try {