From fb1956e23a39598c316c9bf584c492faea6019a2 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Viktor=20Tigerstr=C3=B6m?= <11711198+ViktorTigerstrom@users.noreply.github.com> Date: Sat, 10 Dec 2022 23:02:00 +0100 Subject: [PATCH] Avoid unnecessary looping over all peers' channels --- lightning/src/ln/channelmanager.rs | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/lightning/src/ln/channelmanager.rs b/lightning/src/ln/channelmanager.rs index 5ef0235e..fefcefac 100644 --- a/lightning/src/ln/channelmanager.rs +++ b/lightning/src/ln/channelmanager.rs @@ -6160,11 +6160,17 @@ where let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(&self.total_consistency_lock, &self.persistence_notifier); if msg.channel_id == [0; 32] { - for chan in self.list_channels() { - if chan.counterparty.node_id == *counterparty_node_id { - // Untrusted messages from peer, we throw away the error if id points to a non-existent channel - let _ = self.force_close_channel_with_peer(&chan.channel_id, counterparty_node_id, Some(&msg.data), true); - } + let channel_ids: Vec<[u8; 32]> = { + let per_peer_state = self.per_peer_state.read().unwrap(); + let peer_state_mutex_opt = per_peer_state.get(counterparty_node_id); + if let None = peer_state_mutex_opt { return; } + let mut peer_state_lock = peer_state_mutex_opt.unwrap().lock().unwrap(); + let peer_state = &mut *peer_state_lock; + peer_state.channel_by_id.keys().cloned().collect() + }; + for channel_id in channel_ids { + // Untrusted messages from peer, we throw away the error if id points to a non-existent channel + let _ = self.force_close_channel_with_peer(&channel_id, counterparty_node_id, Some(&msg.data), true); } } else { { -- 2.30.2