diff --git a/src/dht.cpp b/src/dht.cpp index 72ec2dd14d1076f2da2083ca543b16f27a183b6b..547d9757aab2489efa944e333038bc027983c7e5 100644 --- a/src/dht.cpp +++ b/src/dht.cpp @@ -2175,7 +2175,6 @@ Dht::onError(Sp<net::Request> req, net::DhtProtocolException e) { if (logger_) logger_->e(node->id, "[node %s] token flush", node->toString().c_str()); node->authError(); - node->cancelRequest(req); for (auto& srp : searches(node->getFamily())) { auto& sr = srp.second; for (auto& n : sr->nodes) { diff --git a/src/network_engine.cpp b/src/network_engine.cpp index ad22b3cf4ded08784f07d2ffda0c9607ef63c537..f83f26108e1f4388183e8e4710b176afc19bb458 100644 --- a/src/network_engine.cpp +++ b/src/network_engine.cpp @@ -560,6 +560,7 @@ NetworkEngine::process(std::unique_ptr<ParsedMessage>&& msg, const SockAddr& fro { req->last_try = time_point::min(); req->reply_time = time_point::min(); + req->setError(); onError(req, DhtProtocolException {msg->error_code}); } else { if (logIncoming_) diff --git a/src/request.h b/src/request.h index 61d2dd4fda5a8d220fe13abb5d21e6fce50f19db..5b862911e7c51cec27661f3961eec6d7994927af 100644 --- a/src/request.h +++ b/src/request.h @@ -96,6 +96,12 @@ struct Request { clear(); } } + void setError() { + if (pending()) { + state_ = Request::State::COMPLETED; + clear(); + } + } void cancel() { if (pending()) {