Skip to content

Commit a0905ed

Browse files
committed
f peermanager un-backpressure on timer tick
1 parent b4402df commit a0905ed

File tree

1 file changed

+30
-24
lines changed

1 file changed

+30
-24
lines changed

lightning/src/ln/peer_handler.rs

Lines changed: 30 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1957,6 +1957,9 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
19571957
{
19581958
let peers_lock = self.peers.read().unwrap();
19591959

1960+
self.update_gossip_backlogged();
1961+
let flush_read_disabled = self.gossip_processing_backlog_lifted.swap(false, Ordering::Relaxed);
1962+
19601963
for (descriptor, peer_mutex) in peers_lock.iter() {
19611964
let mut peer = peer_mutex.lock().unwrap();
19621965
if !peer.channel_encryptor.is_ready_for_encryption() || peer.their_node_id.is_none() {
@@ -1972,34 +1975,37 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
19721975
continue;
19731976
}
19741977

1975-
if peer.awaiting_pong_timer_tick_intervals == -1 {
1976-
// Magic value set in `maybe_send_extra_ping`.
1977-
peer.awaiting_pong_timer_tick_intervals = 1;
1978+
loop {
1979+
if peer.awaiting_pong_timer_tick_intervals == -1 {
1980+
// Magic value set in `maybe_send_extra_ping`.
1981+
peer.awaiting_pong_timer_tick_intervals = 1;
1982+
peer.received_message_since_timer_tick = false;
1983+
break;
1984+
}
1985+
1986+
if (peer.awaiting_pong_timer_tick_intervals > 0 && !peer.received_message_since_timer_tick)
1987+
|| peer.awaiting_pong_timer_tick_intervals as u64 >
1988+
MAX_BUFFER_DRAIN_TICK_INTERVALS_PER_PEER as u64 * peers_lock.len() as u64
1989+
{
1990+
descriptors_needing_disconnect.push(descriptor.clone());
1991+
break;
1992+
}
19781993
peer.received_message_since_timer_tick = false;
1979-
continue;
1980-
}
19811994

1982-
if (peer.awaiting_pong_timer_tick_intervals > 0 && !peer.received_message_since_timer_tick)
1983-
|| peer.awaiting_pong_timer_tick_intervals as u64 >
1984-
MAX_BUFFER_DRAIN_TICK_INTERVALS_PER_PEER as u64 * peers_lock.len() as u64
1985-
{
1986-
descriptors_needing_disconnect.push(descriptor.clone());
1987-
continue;
1988-
}
1989-
peer.received_message_since_timer_tick = false;
1995+
if peer.awaiting_pong_timer_tick_intervals > 0 {
1996+
peer.awaiting_pong_timer_tick_intervals += 1;
1997+
break;
1998+
}
19901999

1991-
if peer.awaiting_pong_timer_tick_intervals > 0 {
1992-
peer.awaiting_pong_timer_tick_intervals += 1;
1993-
continue;
2000+
peer.awaiting_pong_timer_tick_intervals = 1;
2001+
let ping = msgs::Ping {
2002+
ponglen: 0,
2003+
byteslen: 64,
2004+
};
2005+
self.enqueue_message(&mut *peer, &ping);
2006+
break;
19942007
}
1995-
1996-
peer.awaiting_pong_timer_tick_intervals = 1;
1997-
let ping = msgs::Ping {
1998-
ponglen: 0,
1999-
byteslen: 64,
2000-
};
2001-
self.enqueue_message(&mut *peer, &ping);
2002-
self.do_attempt_write_data(&mut (descriptor.clone()), &mut *peer, false);
2008+
self.do_attempt_write_data(&mut (descriptor.clone()), &mut *peer, flush_read_disabled);
20032009
}
20042010
}
20052011

0 commit comments

Comments
 (0)