From 4bc00760f9bc36d5b4e8bba7de9bd71a30d7f31a Mon Sep 17 00:00:00 2001
From: Shea Levy <shea@shealevy.com>
Date: Wed, 26 Apr 2017 12:38:16 -0400
Subject: [PATCH] Add Store nesting to fix import-from-derivation within
 filterSource

---
 src/libstore/remote-store.cc |  2 ++
 src/libutil/pool.hh          | 16 ++++++++++++++++
 2 files changed, 18 insertions(+)

diff --git a/src/libstore/remote-store.cc b/src/libstore/remote-store.cc
index bc9ef3d47..af59d5110 100644
--- a/src/libstore/remote-store.cc
+++ b/src/libstore/remote-store.cc
@@ -414,7 +414,9 @@ Path RemoteStore::addToStore(const string & name, const Path & _srcPath,
     try {
         conn->to.written = 0;
         conn->to.warn = true;
+        connections->incCapacity();
         dumpPath(srcPath, conn->to, filter);
+        connections->decCapacity();
         conn->to.warn = false;
         conn->processStderr();
     } catch (SysError & e) {
diff --git a/src/libutil/pool.hh b/src/libutil/pool.hh
index 20df21948..703309002 100644
--- a/src/libutil/pool.hh
+++ b/src/libutil/pool.hh
@@ -68,6 +68,22 @@ public:
         state_->max = max;
     }
 
+    void incCapacity()
+    {
+        auto state_(state.lock());
+        state_->max++;
+        /* we could wakeup here, but this is only used when we're
+         * about to nest Pool usages, and we want to save the slot for
+         * the nested use if we can
+         */
+    }
+
+    void decCapacity()
+    {
+        auto state_(state.lock());
+        state_->max--;
+    }
+
     ~Pool()
     {
         auto state_(state.lock());