Merge pull request #2663 from TheBlueMatt/2023-10-peer-race-send-discon

Fix race between outbound messages and peer disconnection
This commit is contained in:
Matt Corallo 2023-10-18 21:54:57 +00:00 committed by GitHub
commit 0357cafbbb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1870,15 +1870,13 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
let flush_read_disabled = self.gossip_processing_backlog_lifted.swap(false, Ordering::Relaxed);
let mut peers_to_disconnect = HashMap::new();
let mut events_generated = self.message_handler.chan_handler.get_and_clear_pending_msg_events();
events_generated.append(&mut self.message_handler.route_handler.get_and_clear_pending_msg_events());
{
// TODO: There are some DoS attacks here where you can flood someone's outbound send
// buffer by doing things like announcing channels on another node. We should be willing to
// drop optional-ish messages when send buffers get full!
let peers_lock = self.peers.read().unwrap();
let mut events_generated = self.message_handler.chan_handler.get_and_clear_pending_msg_events();
events_generated.append(&mut self.message_handler.route_handler.get_and_clear_pending_msg_events());
let peers = &*peers_lock;
macro_rules! get_peer_for_forwarding {
($node_id: expr) => {