diff --git a/crates/librqbit/src/torrent_state/live/mod.rs b/crates/librqbit/src/torrent_state/live/mod.rs index 42af1e7..8afc060 100644 --- a/crates/librqbit/src/torrent_state/live/mod.rs +++ b/crates/librqbit/src/torrent_state/live/mod.rs @@ -740,11 +740,11 @@ impl TorrentStateLive { } pub(crate) fn reconnect_all_not_needed_peers(&self) { - for pe in self.peers.states.iter() { - if let PeerState::NotNeeded = pe.value().state.get() { - if self.peer_queue_tx.send(*pe.key()).is_err() { - return; - } + for mut pe in self.peers.states.iter_mut() { + if pe.state.not_needed_to_queued(&self.peers.stats) + && self.peer_queue_tx.send(*pe.key()).is_err() + { + return; } } } diff --git a/crates/librqbit/src/torrent_state/live/peer/mod.rs b/crates/librqbit/src/torrent_state/live/peer/mod.rs index c96d846..818483e 100644 --- a/crates/librqbit/src/torrent_state/live/peer/mod.rs +++ b/crates/librqbit/src/torrent_state/live/peer/mod.rs @@ -123,6 +123,14 @@ impl PeerStateNoMut { } } + pub fn not_needed_to_queued(&mut self, counters: &AggregatePeerStatsAtomic) -> bool { + if let PeerState::NotNeeded = &self.0 { + self.set(PeerState::Queued, counters); + return true; + } + false + } + pub fn incoming_connection( &mut self, peer_id: Id20,