From 63013bf3747d68a81af0469acb1a005fd440e6e6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com>
Date: Tue, 17 Oct 2017 03:17:52 +0200
Subject: [PATCH] SearchNode: prevent copy, check request access

---
 src/search.h | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/search.h b/src/search.h
index 40a43e41..e5aeee82 100644
--- a/src/search.h
+++ b/src/search.h
@@ -76,6 +76,11 @@ struct Dht::SearchNode {
                                                       node is a new candidate for inclusion. */
 
     SearchNode() : node() {}
+    SearchNode(const SearchNode&) = delete;
+    SearchNode(SearchNode&&) = default;
+    SearchNode& operator=(const SearchNode&) = delete;
+    SearchNode& operator=(SearchNode&&) = default;
+
     SearchNode(const Sp<Node>& node) : node(node) {}
     ~SearchNode() {
         if (node) {
@@ -186,6 +191,7 @@ struct Dht::SearchNode {
                 node->cancelRequest(status.second);
             }
         }
+        getStatus.clear();
     }
 
     /**
@@ -227,10 +233,11 @@ struct Dht::SearchNode {
     void cancelAnnounce() {
         for (const auto& status : acked) {
             const auto& req = status.second.first;
-            if (req->pending()) {
+            if (req and req->pending()) {
                 node->cancelRequest(req);
             }
         }
+        acked.clear();
     }
 
     bool isListening(time_point now) const {
-- 
GitLab