diff options
author | Eelco Dolstra <edolstra@gmail.com> | 2017-09-05T18·39+0200 |
---|---|---|
committer | Eelco Dolstra <edolstra@gmail.com> | 2017-09-05T18·39+0200 |
commit | b932ea58ec610830ed3141bb14fbd812aa66b2c1 (patch) | |
tree | 79152eb440ad8c9bd71270e1d309c07add4ade16 /src/libstore/local-store.cc | |
parent | 8215b75d36a6c60649dfc8721b8ddd44fbcf697c (diff) |
GC: Don't delete own temproots file
Since file locks are per-process rather than per-file-descriptor, the garbage collector would always acquire a lock on its own temproots file and conclude that it's stale.
Diffstat (limited to 'src/libstore/local-store.cc')
-rw-r--r-- | src/libstore/local-store.cc | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc index 95b05f8afd31..5ca776099df0 100644 --- a/src/libstore/local-store.cc +++ b/src/libstore/local-store.cc @@ -51,6 +51,8 @@ LocalStore::LocalStore(const Params & params) , reservedPath(dbDir + "/reserved") , schemaPath(dbDir + "/schema") , trashDir(realStoreDir + "/trash") + , tempRootsDir(stateDir + "/temproots") + , fnTempRoots(fmt("%s/%d", tempRootsDir, getpid())) , publicKeys(getDefaultPublicKeys()) { auto state(_state.lock()); @@ -61,7 +63,7 @@ LocalStore::LocalStore(const Params & params) createDirs(linksDir); Path profilesDir = stateDir + "/profiles"; createDirs(profilesDir); - createDirs(stateDir + "/temproots"); + createDirs(tempRootsDir); createDirs(dbDir); Path gcRootsDir = stateDir + "/gcroots"; if (!pathExists(gcRootsDir)) { @@ -242,12 +244,12 @@ LocalStore::LocalStore(const Params & params) LocalStore::~LocalStore() { - auto state(_state.lock()); try { + auto state(_state.lock()); if (state->fdTempRoots) { state->fdTempRoots = -1; - unlink(state->fnTempRoots.c_str()); + unlink(fnTempRoots.c_str()); } } catch (...) { ignoreException(); |