diff --git a/src/dht_proxy_server.cpp b/src/dht_proxy_server.cpp index a643a985295cdc0d080cea77a26b7269285e63cc..0ea1fad50e342f6327ec4f96f2aade268c84fb5e 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_)