Skip to content

Commit 4a58e9a

Browse files
committed
Add PeerManager::disconnect_all_peers to avoid complexity in BP
In the coming commits simply calling `timer_tick_occurred` will no longer disconnect all peers, so its helpful to have a utility method.
1 parent 10580f5 commit 4a58e9a

File tree

2 files changed

+19
-4
lines changed

2 files changed

+19
-4
lines changed

lightning-background-processor/src/lib.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@ use lightning::chain::chainmonitor::{ChainMonitor, Persist};
1414
use lightning::chain::keysinterface::{Sign, KeysInterface};
1515
use lightning::ln::channelmanager::ChannelManager;
1616
use lightning::ln::msgs::{ChannelMessageHandler, RoutingMessageHandler};
17-
use lightning::ln::peer_handler::{PeerManager, SocketDescriptor};
18-
use lightning::ln::peer_handler::CustomMessageHandler;
17+
use lightning::ln::peer_handler::{CustomMessageHandler, PeerManager, SocketDescriptor};
1918
use lightning::routing::network_graph::NetGraphMsgHandler;
2019
use lightning::util::events::{Event, EventHandler, EventsProvider};
2120
use lightning::util::logger::Logger;
@@ -236,8 +235,7 @@ impl BackgroundProcessor {
236235
// timer, we should have disconnected all sockets by now (and they're probably
237236
// dead anyway), so disconnect them by calling `timer_tick_occurred()` twice.
238237
log_trace!(logger, "Awoke after more than double our ping timer, disconnecting peers.");
239-
peer_manager.timer_tick_occurred();
240-
peer_manager.timer_tick_occurred();
238+
peer_manager.disconnect_all_peers();
241239
last_ping_call = Instant::now();
242240
} else if last_ping_call.elapsed().as_secs() > PING_TIMER {
243241
log_trace!(logger, "Calling PeerManager's timer_tick_occurred");

lightning/src/ln/peer_handler.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1431,6 +1431,23 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref, CMH: Deref> P
14311431
}
14321432
}
14331433

1434+
/// Disconnects all currently-connected peers. This is useful on platforms where there may be
1435+
/// an indication that TCP sockets have stalled even if we weren't around to time them out
1436+
/// using regular ping/pongs.
1437+
pub fn disconnect_all_peers(&self) {
1438+
let mut peers_lock = self.peers.lock().unwrap();
1439+
let peers = &mut *peers_lock;
1440+
for (mut descriptor, peer) in peers.peers.drain() {
1441+
if let Some(node_id) = peer.their_node_id {
1442+
log_trace!(self.logger, "Disconnecting peer with id {} due to client request to disconnect all peers", node_id);
1443+
peers.node_id_to_descriptor.remove(&node_id);
1444+
self.message_handler.chan_handler.peer_disconnected(&node_id, false);
1445+
}
1446+
descriptor.disconnect_socket();
1447+
}
1448+
debug_assert!(peers.node_id_to_descriptor.is_empty());
1449+
}
1450+
14341451
/// Send pings to each peer and disconnect those which did not respond to the last round of
14351452
/// pings.
14361453
///

0 commit comments

Comments
 (0)