summary refs log tree commit diff
path: root/src/libstore
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2012-03-13 17:07:49 +0100
committerEelco Dolstra <e.dolstra@tudelft.nl>2012-03-13 17:07:49 +0100
commitbd50c01972718167cf86d20dcd9c928b4c3cfbd8 (patch)
treef87b9dc31dc188d8f56e08ea0abf26a3ac7258e8 /src/libstore
parentb461721f17d7104c7ef08a0840d80685b9ae853e (diff)
downloadguix-bd50c01972718167cf86d20dcd9c928b4c3cfbd8.tar.gz
Ensure that Perl processes delete their entry in the temproots directory
By moving the destructor object to libstore.so, it's also run when
download-using-manifests and nix-prefetch-url exit.  This prevents
them from cluttering /nix/var/nix/temproots with stale files.
Diffstat (limited to 'src/libstore')
-rw-r--r--src/libstore/gc.cc12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/libstore/gc.cc b/src/libstore/gc.cc
index e27c63de26..95c7154110 100644
--- a/src/libstore/gc.cc
+++ b/src/libstore/gc.cc
@@ -214,6 +214,18 @@ void removeTempRoots()
 }
 
 
+/* Automatically clean up the temporary roots file when we exit. */
+struct RemoveTempRoots 
+{
+    ~RemoveTempRoots()
+    {
+        removeTempRoots();
+    }
+};
+
+static RemoveTempRoots autoRemoveTempRoots __attribute__((unused));
+
+
 typedef boost::shared_ptr<AutoCloseFD> FDPtr;
 typedef list<FDPtr> FDs;