mirror of
https://github.com/lightningdevkit/rust-lightning.git
synced 2025-02-24 23:08:36 +01:00
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.
This commit is contained in:
parent
10580f55aa
commit
4a58e9ad83
2 changed files with 19 additions and 4 deletions
|
@ -14,8 +14,7 @@ use lightning::chain::chainmonitor::{ChainMonitor, Persist};
|
|||
use lightning::chain::keysinterface::{Sign, KeysInterface};
|
||||
use lightning::ln::channelmanager::ChannelManager;
|
||||
use lightning::ln::msgs::{ChannelMessageHandler, RoutingMessageHandler};
|
||||
use lightning::ln::peer_handler::{PeerManager, SocketDescriptor};
|
||||
use lightning::ln::peer_handler::CustomMessageHandler;
|
||||
use lightning::ln::peer_handler::{CustomMessageHandler, PeerManager, SocketDescriptor};
|
||||
use lightning::routing::network_graph::NetGraphMsgHandler;
|
||||
use lightning::util::events::{Event, EventHandler, EventsProvider};
|
||||
use lightning::util::logger::Logger;
|
||||
|
@ -236,8 +235,7 @@ impl BackgroundProcessor {
|
|||
// timer, we should have disconnected all sockets by now (and they're probably
|
||||
// dead anyway), so disconnect them by calling `timer_tick_occurred()` twice.
|
||||
log_trace!(logger, "Awoke after more than double our ping timer, disconnecting peers.");
|
||||
peer_manager.timer_tick_occurred();
|
||||
peer_manager.timer_tick_occurred();
|
||||
peer_manager.disconnect_all_peers();
|
||||
last_ping_call = Instant::now();
|
||||
} else if last_ping_call.elapsed().as_secs() > PING_TIMER {
|
||||
log_trace!(logger, "Calling PeerManager's timer_tick_occurred");
|
||||
|
|
|
@ -1431,6 +1431,23 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref, CMH: Deref> P
|
|||
}
|
||||
}
|
||||
|
||||
/// Disconnects all currently-connected peers. This is useful on platforms where there may be
|
||||
/// an indication that TCP sockets have stalled even if we weren't around to time them out
|
||||
/// using regular ping/pongs.
|
||||
pub fn disconnect_all_peers(&self) {
|
||||
let mut peers_lock = self.peers.lock().unwrap();
|
||||
let peers = &mut *peers_lock;
|
||||
for (mut descriptor, peer) in peers.peers.drain() {
|
||||
if let Some(node_id) = peer.their_node_id {
|
||||
log_trace!(self.logger, "Disconnecting peer with id {} due to client request to disconnect all peers", node_id);
|
||||
peers.node_id_to_descriptor.remove(&node_id);
|
||||
self.message_handler.chan_handler.peer_disconnected(&node_id, false);
|
||||
}
|
||||
descriptor.disconnect_socket();
|
||||
}
|
||||
debug_assert!(peers.node_id_to_descriptor.is_empty());
|
||||
}
|
||||
|
||||
/// Send pings to each peer and disconnect those which did not respond to the last round of
|
||||
/// pings.
|
||||
///
|
||||
|
|
Loading…
Add table
Reference in a new issue