@@ -1957,6 +1957,9 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
1957
1957
{
1958
1958
let peers_lock = self . peers . read ( ) . unwrap ( ) ;
1959
1959
1960
+ self . update_gossip_backlogged ( ) ;
1961
+ let flush_read_disabled = self . gossip_processing_backlog_lifted . swap ( false , Ordering :: Relaxed ) ;
1962
+
1960
1963
for ( descriptor, peer_mutex) in peers_lock. iter ( ) {
1961
1964
let mut peer = peer_mutex. lock ( ) . unwrap ( ) ;
1962
1965
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
1972
1975
continue ;
1973
1976
}
1974
1977
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
+ }
1978
1993
peer. received_message_since_timer_tick = false ;
1979
- continue ;
1980
- }
1981
1994
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
+ }
1990
1999
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 ;
1994
2007
}
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) ;
2003
2009
}
2004
2010
}
2005
2011
0 commit comments