From f4162664c3b8163bf02f0c69d1d8f3a482d79d70 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Simon=20D=C3=A9saulniers?= <rostydela@gmail.com>
Date: Tue, 27 Oct 2015 17:42:51 -0400
Subject: [PATCH] remove periodic Announce repeat functionnality

---
 src/dht.cpp | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/src/dht.cpp b/src/dht.cpp
index 67c3a037..787ad451 100644
--- a/src/dht.cpp
+++ b/src/dht.cpp
@@ -2505,14 +2505,19 @@ Dht::processMessage(const uint8_t *buf, size_t buflen, const sockaddr *from, soc
                     sr->get_step_time = now;
 
                 // If the value was just successfully announced, call the callback
-                for (auto& a : sr->announce) {
-                    if (!a.callback || !a.value || a.value->id != msg.value_id)
-                        continue;
+                auto a_to_remove = std::remove_if(sr->announce.begin(), sr->announce.end(), [&](Announce &a) {
+                    if (!a.value || a.value->id != msg.value_id)
+                        return false;
                     if (sr->isAnnounced(msg.value_id, getType(a.value->type), now)) {
-                        a.callback(true, sr->getNodes());
-                        a.callback = nullptr;
+                        if (a.callback) {
+                            a.callback(true, sr->getNodes());
+                            a.callback = nullptr;
+                        }
+                        return true;
                     }
-                }
+                    return false;
+                });
+                sr->announce.erase(a_to_remove, sr->announce.end());
             }
         } else if (msg.tid.matches(TransPrefix::LISTEN, &ttid)) {
             DHT_DEBUG("Got reply to listen.");
-- 
GitLab