diff options
author | Eelco Dolstra <edolstra@gmail.com> | 2018-10-04T12·46+0200 |
---|---|---|
committer | Eelco Dolstra <edolstra@gmail.com> | 2019-08-02T16·48+0200 |
commit | 399b6f3c46077e10a7047e8216fc1a67425a768a (patch) | |
tree | 57014df3025c759940a60e2c20c0250d8290bb07 /src/libstore | |
parent | a2597d5f27bc6cfa26343be2f481c8a9d1e22753 (diff) |
nix-store --verify: Don't repair while holding the GC lock
Diffstat (limited to 'src/libstore')
-rw-r--r-- | src/libstore/local-store.cc | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc index 485fdd691932..63b11467eb95 100644 --- a/src/libstore/local-store.cc +++ b/src/libstore/local-store.cc @@ -1210,7 +1210,8 @@ bool LocalStore::verifyStore(bool checkContents, RepairFlag repair) bool errors = false; - /* Acquire the global GC lock to prevent a garbage collection. */ + /* Acquire the global GC lock to get a consistent snapshot of + existing and valid paths. */ AutoCloseFD fdGCLock = openGCLock(ltWrite); PathSet store; @@ -1221,13 +1222,11 @@ bool LocalStore::verifyStore(bool checkContents, RepairFlag repair) PathSet validPaths2 = queryAllValidPaths(), validPaths, done; + fdGCLock = -1; + for (auto & i : validPaths2) verifyPath(i, store, done, validPaths, repair, errors); - /* Release the GC lock so that checking content hashes (which can - take ages) doesn't block the GC or builds. */ - fdGCLock = -1; - /* Optionally, check the content hashes (slow). */ if (checkContents) { printInfo("checking hashes..."); |