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 nix-comm...@cs.uu.nl http://mail.cs.uu.nl/mailman/listinfo/nix-commits