about summary refs log tree commit diff
path: root/src/libstore/gc.cc
diff options
context:
space:
mode:
authorBas van Dijk <v.dijk.bas@gmail.com>2019-07-30T09·29+0200
committerBas van Dijk <v.dijk.bas@gmail.com>2019-07-30T09·29+0200
commitee1e3132cab9d7de14837f2b04b115e544ae1622 (patch)
treec96c194eed8746d93b939c3953185391976c8c9c /src/libstore/gc.cc
parent41a52466854ab3a7d4adedc3777c0b0585ef79fe (diff)
Disable findRuntimeRoots on darwin when running tests because lsof is slow
See: https://github.com/NixOS/nix/issues/3011
Diffstat (limited to 'src/libstore/gc.cc')
-rw-r--r--src/libstore/gc.cc25
1 files changed, 15 insertions, 10 deletions
diff --git a/src/libstore/gc.cc b/src/libstore/gc.cc
index 26e2b0dca7..83cdf13a6a 100644
--- a/src/libstore/gc.cc
+++ b/src/libstore/gc.cc
@@ -444,17 +444,22 @@ void LocalStore::findRuntimeRoots(Roots & roots, bool censor)
     }
 
 #if !defined(__linux__)
-    try {
-        std::regex lsofRegex(R"(^n(/.*)$)");
-        auto lsofLines =
-            tokenizeString<std::vector<string>>(runProgram(LSOF, true, { "-n", "-w", "-F", "n" }), "\n");
-        for (const auto & line : lsofLines) {
-            std::smatch match;
-            if (std::regex_match(line, match, lsofRegex))
-                unchecked[match[1]].emplace("{lsof}");
+    // lsof is really slow on OS X. This actually causes the gc-concurrent.sh test to fail.
+    // See: https://github.com/NixOS/nix/issues/3011
+    // Because of this we disable lsof when running the tests.
+    if (getEnv("_NIX_TEST_NO_LSOF") == "") {
+        try {
+            std::regex lsofRegex(R"(^n(/.*)$)");
+            auto lsofLines =
+                tokenizeString<std::vector<string>>(runProgram(LSOF, true, { "-n", "-w", "-F", "n" }), "\n");
+            for (const auto & line : lsofLines) {
+                std::smatch match;
+                if (std::regex_match(line, match, lsofRegex))
+                    unchecked[match[1]].emplace("{lsof}");
+            }
+        } catch (ExecError & e) {
+            /* lsof not installed, lsof failed */
         }
-    } catch (ExecError & e) {
-        /* lsof not installed, lsof failed */
     }
 #endif