about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/nix-daemon/nix-daemon.cc18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/nix-daemon/nix-daemon.cc b/src/nix-daemon/nix-daemon.cc
index 014378d27e74..63b5eb87d9d2 100644
--- a/src/nix-daemon/nix-daemon.cc
+++ b/src/nix-daemon/nix-daemon.cc
@@ -478,15 +478,29 @@ static void performOp(TunnelLogger * logger, ref<Store> store,
         Roots roots = store->findRoots();
         logger->stopWork();
         size_t total_length = 0;
-        for (auto & root : roots)
-            total_length += root.second.size();
+        bool hasMemoryLink;
+        for (auto & [target, links] : roots) {
+            hasMemoryLink = false;
+            for (auto & link : links) {
+                if (link.rfind("{memory:", 0) == 0) {
+                    if (hasMemoryLink) continue;
+                    ++total_length;
+                    hasMemoryLink = true;
+                } else {
+                    ++total_length;
+                }
+            }
+        }
         to << total_length;
         int n = 0;
         for (auto & [target, links] : roots) {
+            bool hasMemoryLink = false;
             for (auto & link : links) {
                 // Obfuscate 'memory' roots as they expose information about other users,
                 if (link.rfind("{memory:", 0) == 0) {
+                    if (hasMemoryLink) continue;
                     to << fmt("{memory:%d}", n++) << target;
+                    hasMemoryLink = true;
                 } else {
                     to << link << target;
                 }