From f836d41dad3b29a42c954ac98048cdf54416b249 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Blin?= <sebastien.blin@savoirfairelinux.com> Date: Thu, 12 Aug 2021 11:34:51 -0400 Subject: [PATCH] contact_list: fix isActive() when remove/re-add a contact Because time_t is in seconds, re-adding a contact just after removing it can cause isActive() to be false (because removed == added). Change-Id: I25a9fa1d6d3cadb152c2d15453179ecf364d0737 GitLab: https://git.jami.net/savoirfairelinux/ring-project/-/issues/1282 --- src/jamidht/contact_list.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/jamidht/contact_list.cpp b/src/jamidht/contact_list.cpp index 1d88a227a7..351bc2b66b 100644 --- a/src/jamidht/contact_list.cpp +++ b/src/jamidht/contact_list.cpp @@ -81,6 +81,10 @@ ContactList::addContact(const dht::InfoHash& h, bool confirmed, const std::strin else if (c->second.isActive() and c->second.confirmed == confirmed) return false; c->second.added = std::time(nullptr); + // NOTE: because we can re-add a contact after removing it + // we should reset removed (as not removed anymore). This fix isActive() + // if addContact is called just after removeContact during the same second + c->second.removed = 0; c->second.conversationId = conversationId; c->second.confirmed |= confirmed; auto hStr = h.toString(); -- GitLab