From bd8c9d05d8c314ddf13b2e64394a636e6a0061cb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com>
Date: Thu, 11 Jun 2020 15:03:04 -0400
Subject: [PATCH] network engine: complete request in case of error

---
 src/dht.cpp            | 1 -
 src/network_engine.cpp | 1 +
 src/request.h          | 6 ++++++
 3 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/src/dht.cpp b/src/dht.cpp
index 72ec2dd1..547d9757 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 ad22b3cf..f83f2610 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 61d2dd4f..5b862911 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()) {
-- 
GitLab