From 74eb6f9ba3ab5eb70cf01a4cd8e57da71460c32c Mon Sep 17 00:00:00 2001 From: draoi Date: Tue, 2 Jul 2024 21:37:56 +0200 Subject: [PATCH] seedsync: don't allow duplicate connections to the same seed --- src/net/session/seedsync_session.rs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/net/session/seedsync_session.rs b/src/net/session/seedsync_session.rs index 6e9880d95..83c53a4d3 100644 --- a/src/net/session/seedsync_session.rs +++ b/src/net/session/seedsync_session.rs @@ -62,6 +62,7 @@ use super::{ Session, SessionBitFlag, SESSION_SEED, }; use crate::{ + net::hosts::HostState, system::{CondVar, LazyWeak, StoppableTask, StoppableTaskPtr}, Error, }; @@ -184,6 +185,7 @@ impl Slot { /// `notify()` is called again. async fn run(self: Arc) { let ex = self.p2p().executor(); + let hosts = self.p2p().hosts(); loop { // Wait for a signal from notify() before proceeding with the seedsync. @@ -193,6 +195,16 @@ impl Slot { target: "net::session::seedsync_session", "SeedSyncSession::start_seed() [START]", ); + if let Err(e) = hosts.try_register(self.addr.clone(), HostState::Connect) { + debug!(target: "net::session::seedsync_session", + "Cannot connect to seed={}, err={}", &self.addr, e); + + // Reset the CondVar for future use. + self.reset(); + + continue + } + match self.connector.connect(&self.addr).await { Ok((url, ch)) => { info!( @@ -240,7 +252,7 @@ impl Slot { } // Seed process complete - if self.p2p().hosts().container.is_empty(HostColor::Grey) { + if hosts.container.is_empty(HostColor::Grey) { warn!(target: "net::session::seedsync_session()", "[P2P] Greylist empty after seeding"); }