diff options
author | eldritch horrors <pennae@lix.systems> | 2024-03-04 08:16:28 +0100 |
---|---|---|
committer | eldritch horrors <pennae@lix.systems> | 2024-03-04 08:16:28 +0100 |
commit | 298db5d1cdbbd3198b8b08ae63fcea7c701cac22 (patch) | |
tree | b98b8f25fecb0081bdbde6a68c12ca7cac234e27 | |
parent | 68f148ed45da0a8b827a96611e7825d5d2396454 (diff) |
Merge pull request #9804 from edolstra/missing-nar-crash
Fix crash when NAR is missing from binary cache
(cherry picked from commit 3b20cca9625a1701a10a883735e7315185629563)
Change-Id: I50ff18f4a6de69c323473b4a8e3e098d1f365145
-rw-r--r-- | src/libstore/build/worker.cc | 2 | ||||
-rw-r--r-- | src/libstore/local-store.cc | 6 | ||||
-rw-r--r-- | src/libstore/store-api.cc | 5 |
3 files changed, 11 insertions, 2 deletions
diff --git a/src/libstore/build/worker.cc b/src/libstore/build/worker.cc index 850df5f1e..d6bcba3ff 100644 --- a/src/libstore/build/worker.cc +++ b/src/libstore/build/worker.cc @@ -250,7 +250,7 @@ void Worker::childTerminated(Goal * goal, bool wakeSleepers) void Worker::waitForBuildSlot(GoalPtr goal) { - debug("wait for build slot"); + goal->trace("wait for build slot"); bool isSubstitutionGoal = goal->jobCategory() == JobCategory::Substitution; if ((!isSubstitutionGoal && getNrLocalBuilds() < settings.maxBuildJobs) || (isSubstitutionGoal && getNrSubstitutions() < settings.maxSubstitutionJobs)) diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc index 554e13e3d..78ca79c89 100644 --- a/src/libstore/local-store.cc +++ b/src/libstore/local-store.cc @@ -1203,7 +1203,11 @@ void LocalStore::addToStore(const ValidPathInfo & info, Source & source, Finally cleanup = [&]() { if (!narRead) { ParseSink sink; - parseDump(sink, source); + try { + parseDump(sink, source); + } catch (...) { + ignoreException(); + } } }; diff --git a/src/libstore/store-api.cc b/src/libstore/store-api.cc index 958691256..b787ac2f2 100644 --- a/src/libstore/store-api.cc +++ b/src/libstore/store-api.cc @@ -1069,6 +1069,11 @@ void copyStorePath( RepairFlag repair, CheckSigsFlag checkSigs) { + /* Bail out early (before starting a download from srcStore) if + dstStore already has this path. */ + if (!repair && dstStore.isValidPath(storePath)) + return; + auto srcUri = srcStore.getUri(); auto dstUri = dstStore.getUri(); auto storePathS = srcStore.printStorePath(storePath); |