From f160a30d5612506de41a8206a57eccee1cd85fb7 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 19 Nov 2014 17:07:29 +0100 Subject: [PATCH] Clean up temp roots in a more C++ way --- nix/libstore/gc.cc | 26 -------------------------- nix/libstore/local-store.cc | 9 +++++++++ nix/libstore/local-store.hh | 4 ++++ 3 files changed, 13 insertions(+), 26 deletions(-) diff --git a/nix/libstore/gc.cc b/nix/libstore/gc.cc index 2a53b54110..e019d9343e 100644 --- a/nix/libstore/gc.cc +++ b/nix/libstore/gc.cc @@ -145,11 +145,6 @@ Path addPermRoot(StoreAPI & store, const Path & _storePath, } -/* The file to which we write our temporary roots. */ -static Path fnTempRoots; -static AutoCloseFD fdTempRoots; - - void LocalStore::addTempRoot(const Path & path) { /* Create the temporary roots file for this process. */ @@ -204,27 +199,6 @@ void LocalStore::addTempRoot(const Path & path) } -void removeTempRoots() -{ - if (fdTempRoots != -1) { - fdTempRoots.close(); - unlink(fnTempRoots.c_str()); - } -} - - -/* Automatically clean up the temporary roots file when we exit. */ -struct RemoveTempRoots -{ - ~RemoveTempRoots() - { - removeTempRoots(); - } -}; - -static RemoveTempRoots autoRemoveTempRoots __attribute__((unused)); - - typedef std::shared_ptr FDPtr; typedef list FDs; diff --git a/nix/libstore/local-store.cc b/nix/libstore/local-store.cc index 2f5c0e178f..e3de33b6e4 100644 --- a/nix/libstore/local-store.cc +++ b/nix/libstore/local-store.cc @@ -363,6 +363,15 @@ LocalStore::~LocalStore() } catch (...) { ignoreException(); } + + try { + if (fdTempRoots != -1) { + fdTempRoots.close(); + unlink(fnTempRoots.c_str()); + } + } catch (...) { + ignoreException(); + } } diff --git a/nix/libstore/local-store.hh b/nix/libstore/local-store.hh index dccdba533a..e0aabdba42 100644 --- a/nix/libstore/local-store.hh +++ b/nix/libstore/local-store.hh @@ -244,6 +244,10 @@ private: bool didSetSubstituterEnv; + /* The file to which we write our temporary roots. */ + Path fnTempRoots; + AutoCloseFD fdTempRoots; + int getSchema(); void openDB(bool create);