diff --git a/src/dhtrunner.cpp b/src/dhtrunner.cpp index 6f15a2d967cafbe4e3d70d84717ceba0bf2ad7af..86521bbe21860a505cd16097890dc7069531beba 100644 --- a/src/dhtrunner.cpp +++ b/src/dhtrunner.cpp @@ -665,17 +665,17 @@ DhtRunner::listen(InfoHash hash, ValueCallback vcb, Value::Filter f, Where w) listener.hash = hash; listener.f = std::move(f); listener.w = std::move(w); - listener.gcb = [hash,vcb,tokenbGlobal,this](const std::vector<Sp<Value>>& vals, bool expired){ + listener.gcb = [hash,vcb,tokenbGlobal,this](const std::vector<Sp<Value>>& vals, bool expired) { if (not vcb(vals, expired)) { cancelListen(hash, tokenbGlobal); return false; } return true; }; - if (use_proxy) - listener.tokenProxyDht = dht.listen(hash, listener.gcb, listener.f, listener.w); - else - listener.tokenClassicDht = dht.listen(hash, listener.gcb, listener.f, listener.w); + if (auto token = dht.listen(hash, listener.gcb, listener.f, listener.w)) { + if (use_proxy) listener.tokenProxyDht = token; + else listener.tokenClassicDht = token; + } ret_token->set_value(tokenbGlobal); #else ret_token->set_value(dht.listen(hash, std::move(vcb), std::move(f), std::move(w)));