diff --git a/src/dht.cpp b/src/dht.cpp index 5c59a716b1c7fb1eb7ceb8d0610e05b5aa1ca1d9..a7ccfdc4e4da2cbf4eef147af128761ea088e150 100644 --- a/src/dht.cpp +++ b/src/dht.cpp @@ -685,7 +685,7 @@ struct Dht::Search { * @param now The time reference to now. */ void checkAnnounced(time_point now, Value::Id vid = Value::INVALID_ID) { - announce.erase(std::remove_if(announce.begin(), announce.end(), + auto announced = std::remove_if(announce.begin(), announce.end(), [this,&vid,&now](Announce& a) { if (vid != Value::INVALID_ID and (!a.value || a.value->id != vid)) return false; @@ -698,7 +698,13 @@ struct Dht::Search { return true; } return false; - }), announce.end()); + }); + // remove acked for cleared annouces + for (auto it = announced; it != announce.end(); ++it) { + for (auto& n : nodes) + n.acked.erase(it->value->id); + } + announce.erase(announced, announce.end()); } std::vector<std::shared_ptr<Node>> getNodes() const;