aboutsummaryrefslogtreecommitdiff
path: root/src/libstore
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstore')
-rw-r--r--src/libstore/build/local-derivation-goal.cc3
-rw-r--r--src/libstore/globals.hh9
2 files changed, 12 insertions, 0 deletions
diff --git a/src/libstore/build/local-derivation-goal.cc b/src/libstore/build/local-derivation-goal.cc
index 3429afafa..cdbd0f5a7 100644
--- a/src/libstore/build/local-derivation-goal.cc
+++ b/src/libstore/build/local-derivation-goal.cc
@@ -1977,6 +1977,9 @@ void LocalDerivationGoal::runChild()
/* Disable core dumps by default. */
struct rlimit limit = { 0, RLIM_INFINITY };
+ if (settings.enableCoreDumps) {
+ limit.rlim_cur = RLIM_INFINITY;
+ }
setrlimit(RLIMIT_CORE, &limit);
// FIXME: set other limits to deterministic values?
diff --git a/src/libstore/globals.hh b/src/libstore/globals.hh
index 16af3a415..8856d8fae 100644
--- a/src/libstore/globals.hh
+++ b/src/libstore/globals.hh
@@ -290,6 +290,15 @@ public:
Setting<off_t> reservedSize{this, 8 * 1024 * 1024, "gc-reserved-space",
"Amount of reserved disk space for the garbage collector."};
+ Setting<bool> enableCoreDumps{
+ this, false, "enable-core-dumps",
+ R"(
+ If set to `false` (the default), `RLIMIT_CORE` has a soft limit of zero.
+ If set to `true`, the soft limit is infinite.
+
+ The hard limit is always infinite.
+ )"};
+
Setting<bool> fsyncMetadata{
this, true, "fsync-metadata",
R"(