From 69fe399db0370a66b2546a8fc7a2bf8d9d420253 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com>
Date: Sun, 1 Dec 2019 20:54:37 -0500
Subject: [PATCH] proxy server: cancelListen on destroy

---
 src/dht_proxy_server.cpp | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/src/dht_proxy_server.cpp b/src/dht_proxy_server.cpp
index a643a985..0ea1fad5 100644
--- a/src/dht_proxy_server.cpp
+++ b/src/dht_proxy_server.cpp
@@ -273,6 +273,25 @@ DhtProxyServer::io_context() const
 
 DhtProxyServer::~DhtProxyServer()
 {
+    if (dht_) {
+        std::lock_guard<std::mutex> lock(lockListener_);
+        for (auto& l : listeners_) {
+            dht_->cancelListen(l.second.hash, std::move(l.second.token));
+            if (l.second.response)
+                l.second.response->done();
+        }
+        for (auto& lm: pushListeners_)  {
+            for (auto& ls: lm.second.listeners)
+                for (auto& l : ls.second) {
+                    if (l.expireNotifyTimer)
+                        l.expireNotifyTimer->cancel();
+                    if (l.expireTimer)
+                        l.expireTimer->cancel();
+                    dht_->cancelListen(ls.first, std::move(l.internalToken));
+                }
+        }
+        pushListeners_.clear();
+    }
     if (logger_)
         logger_->d("[proxy:server] closing http server");
     if (httpServer_)
-- 
GitLab