Merge pull request #10853 from DeterminateSystems/thread-safe-srcToStore

Make EvalState::srcToStore thread-safe
This commit is contained in:
Robert Hensing 2024-06-06 19:31:46 +02:00 committed by GitHub
commit e1b3716d50
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 5 additions and 5 deletions

View file

@ -2470,10 +2470,10 @@ StorePath EvalState::copyPathToStore(NixStringContext & context, const SourcePat
if (nix::isDerivation(path.path.abs())) if (nix::isDerivation(path.path.abs()))
error<EvalError>("file names are not allowed to end in '%1%'", drvExtension).debugThrow(); error<EvalError>("file names are not allowed to end in '%1%'", drvExtension).debugThrow();
auto i = srcToStore.find(path); auto dstPathCached = get(*srcToStore.lock(), path);
auto dstPath = i != srcToStore.end() auto dstPath = dstPathCached
? i->second ? *dstPathCached
: [&]() { : [&]() {
auto dstPath = fetchToStore( auto dstPath = fetchToStore(
*store, *store,
@ -2484,7 +2484,7 @@ StorePath EvalState::copyPathToStore(NixStringContext & context, const SourcePat
nullptr, nullptr,
repair); repair);
allowPath(dstPath); allowPath(dstPath);
srcToStore.insert_or_assign(path, dstPath); srcToStore.lock()->try_emplace(path, dstPath);
printMsg(lvlChatty, "copied source '%1%' -> '%2%'", path, store->printStorePath(dstPath)); printMsg(lvlChatty, "copied source '%1%' -> '%2%'", path, store->printStorePath(dstPath));
return dstPath; return dstPath;
}(); }();

View file

@ -306,7 +306,7 @@ private:
/* Cache for calls to addToStore(); maps source paths to the store /* Cache for calls to addToStore(); maps source paths to the store
paths. */ paths. */
std::map<SourcePath, StorePath> srcToStore; Sync<std::map<SourcePath, StorePath>> srcToStore;
/** /**
* A cache from path names to parse trees. * A cache from path names to parse trees.