Make EvalState::srcToStore thread-safe

This commit is contained in:
Eelco Dolstra 2024-06-04 16:05:56 +02:00
parent b36aa04b53
commit 7d295c594e
2 changed files with 5 additions and 5 deletions

View file

@ -2415,10 +2415,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,
@ -2429,7 +2429,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.