forked from lix-project/lix
nix-store: fix out of sync protocol
If a NAR is already in the store, addToStore doesn't read the source which makes the protocol go out of sync. This happens for example when two client try to nix-copy-closure the same derivation at the same time.
This commit is contained in:
parent
91b00b145f
commit
b226b5cd97
|
@ -950,8 +950,16 @@ static void opServe(Strings opFlags, Strings opArgs)
|
||||||
info.sigs = readStrings<StringSet>(in);
|
info.sigs = readStrings<StringSet>(in);
|
||||||
in >> info.ca;
|
in >> info.ca;
|
||||||
|
|
||||||
// FIXME: race if addToStore doesn't read source?
|
if (info.narSize == 0) {
|
||||||
store->addToStore(info, in, NoRepair, NoCheckSigs);
|
throw Error("narInfo is too old and missing the narSize field");
|
||||||
|
}
|
||||||
|
|
||||||
|
SizedSource sizedSource(in, info.narSize);
|
||||||
|
|
||||||
|
store->addToStore(info, sizedSource, NoRepair, NoCheckSigs);
|
||||||
|
|
||||||
|
// consume all the data that has been sent before continuing.
|
||||||
|
sizedSource.drainAll();
|
||||||
|
|
||||||
out << 1; // indicate success
|
out << 1; // indicate success
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue