diff --git a/src/dht.cpp b/src/dht.cpp
index 3640c99d17b78a1c2b956f41c70c522b96e979a3..9ed483f3c27bc8da57ce5579b84927e78dd6a2b1 100644
--- a/src/dht.cpp
+++ b/src/dht.cpp
@@ -1367,8 +1367,13 @@ Dht::cancelListen(const InfoHash& id, size_t token)
             if (af_token == 0)
                 continue;
             s->listeners.erase(af_token);
-            for (auto& sn : s->nodes) // also erase requests for all searchnodes.
-                network_engine.cancelRequest(sn.listenStatus);
+            if (s->listeners.empty()) {
+                for (auto& sn : s->nodes) {
+                    // also erase requests for all searchnodes.
+                    network_engine.cancelRequest(sn.listenStatus);
+                    sn.listenStatus.reset();
+                }
+            }
         }
     };
     searches_cancel_listen(searches4);