diff --git a/src/build-remote/build-remote.cc b/src/build-remote/build-remote.cc index df579729a..c6e75e8cc 100644 --- a/src/build-remote/build-remote.cc +++ b/src/build-remote/build-remote.cc @@ -241,7 +241,7 @@ connected: if (!missing.empty()) { Activity act(*logger, lvlTalkative, actUnknown, fmt("copying outputs from '%s'", storeUri)); - setenv("NIX_HELD_LOCKS", concatStringsSep(" ", missing).c_str(), 1); /* FIXME: ugly */ + store->locksHeld.insert(missing.begin(), missing.end()); /* FIXME: ugly */ copyPaths(ref(sshStore), store, missing, NoRepair, NoCheckSigs, substitute); } diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc index 8a79fc723..4afe51ea9 100644 --- a/src/libstore/local-store.cc +++ b/src/libstore/local-store.cc @@ -992,7 +992,6 @@ void LocalStore::addToStore(const ValidPathInfo & info, const ref & /* Lock the output path. But don't lock if we're being called from a build hook (whose parent process already acquired a lock on this path). */ - static auto locksHeld = tokenizeString(getEnv("NIX_HELD_LOCKS")); if (!locksHeld.count(info.path)) outputLock.lockPaths({realPath}); diff --git a/src/libstore/local-store.hh b/src/libstore/local-store.hh index 30bef3a79..bbd50e1c1 100644 --- a/src/libstore/local-store.hh +++ b/src/libstore/local-store.hh @@ -104,6 +104,9 @@ private: public: + // Hack for build-remote.cc. + PathSet locksHeld = tokenizeString(getEnv("NIX_HELD_LOCKS")); + /* Initialise the local store, upgrading the schema if necessary. */ LocalStore(const Params & params);