about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/libstore/gc.cc5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/libstore/gc.cc b/src/libstore/gc.cc
index d3cac06e4c5a..88ddad822baf 100644
--- a/src/libstore/gc.cc
+++ b/src/libstore/gc.cc
@@ -512,6 +512,11 @@ bool LocalStore::tryToDelete(GCState & state, const Path & path)
                 }
         }
 
+        /* If gc-keep-derivations and gc-keep-outputs are both set,
+           it's possible that the path has already been deleted (due
+           to the recursion below), so bail out. */
+        if (!pathExists(path)) return true;
+
         /* If gc-keep-outputs is set, then don't delete this path if
            its deriver is not garbage.  !!! This is somewhat buggy,
            since there might be multiple derivers, but the database