Author: eelco
Date: Mon Sep 12 09:07:43 2011
New Revision: 29200
URL: https://ssl.nixos.org/websvn/nix/?rev=29200&sc=1
Log:
* Ouch. A store upgrade could cause a substituter to be triggered,
causing a deadlock.
Modified:
nix/trunk/src/libstore/derivations.cc
nix/trunk/src/libstore/local-store.cc
nix/trunk/src/libstore/local-store.hh
Modified: nix/trunk/src/libstore/derivations.cc
==============================================================================
--- nix/trunk/src/libstore/derivations.cc Mon Sep 12 09:06:44 2011
(r29199)
+++ nix/trunk/src/libstore/derivations.cc Mon Sep 12 09:07:43 2011
(r29200)
@@ -239,7 +239,8 @@
foreach (DerivationInputs::const_iterator, i, drv.inputDrvs) {
Hash h = drvHashes[i->first];
if (h.type == htUnknown) {
- Derivation drv2 = derivationFromPath(store, i->first);
+ assert(store.isValidPath(i->first));
+ Derivation drv2 = parseDerivation(readFile(i->first));
h = hashDerivationModulo(store, drv2);
drvHashes[i->first] = h;
}
Modified: nix/trunk/src/libstore/local-store.cc
==============================================================================
--- nix/trunk/src/libstore/local-store.cc Mon Sep 12 09:06:44 2011
(r29199)
+++ nix/trunk/src/libstore/local-store.cc Mon Sep 12 09:07:43 2011
(r29200)
@@ -510,7 +510,7 @@
}
-unsigned long long LocalStore::addValidPath(const ValidPathInfo & info)
+unsigned long long LocalStore::addValidPath(const ValidPathInfo & info, bool
checkOutputs)
{
SQLiteStmtUse use(stmtRegisterValidPath);
stmtRegisterValidPath.bind(info.path);
@@ -540,7 +540,7 @@
derivations). Note that if this throws an error, then the
DB transaction is rolled back, so the path validity
registration above is undone. */
- checkDerivationOutputs(info.path, drv);
+ if (checkOutputs) checkDerivationOutputs(info.path, drv);
foreach (DerivationOutputs::iterator, i, drv.outputs) {
SQLiteStmtUse use(stmtAddDerivationOutput);
@@ -1521,7 +1521,7 @@
SQLiteTxn txn(db);
foreach (PathSet::iterator, i, validPaths) {
- addValidPath(queryPathInfoOld(*i));
+ addValidPath(queryPathInfoOld(*i), false);
std::cerr << ".";
}
Modified: nix/trunk/src/libstore/local-store.hh
==============================================================================
--- nix/trunk/src/libstore/local-store.hh Mon Sep 12 09:06:44 2011
(r29199)
+++ nix/trunk/src/libstore/local-store.hh Mon Sep 12 09:07:43 2011
(r29200)
@@ -226,7 +226,7 @@
unsigned long long queryValidPathId(const Path & path);
- unsigned long long addValidPath(const ValidPathInfo & info);
+ unsigned long long addValidPath(const ValidPathInfo & info, bool
checkOutputs = true);
void addReference(unsigned long long referrer, unsigned long long
reference);
_______________________________________________
nix-commits mailing list
[email protected]
http://mail.cs.uu.nl/mailman/listinfo/nix-commits