@@ -413,6 +413,12 @@ struct Peer {
413
413
awaiting_pong_timer_tick_intervals : i8 ,
414
414
received_message_since_timer_tick : bool ,
415
415
sent_gossip_timestamp_filter : bool ,
416
+
417
+ /// Indicates we've received a `channel_announcement` since the last time we had
418
+ /// [`PeerManager::gossip_processing_backlogged`] set (or, really, that we've received a
419
+ /// `channel_announcement` at all - we set this unconditionally but unset it every time we
420
+ /// check if we're gossip-processing-backlogged).
421
+ received_channel_announce_since_backlogged : bool ,
416
422
}
417
423
418
424
impl Peer {
@@ -449,8 +455,12 @@ impl Peer {
449
455
450
456
/// Returns whether we should be reading bytes from this peer, based on whether its outbound
451
457
/// buffer still has space and we don't need to pause reads to get some writes out.
452
- fn should_read ( & self ) -> bool {
453
- self . pending_outbound_buffer . len ( ) < OUTBOUND_BUFFER_LIMIT_READ_PAUSE
458
+ fn should_read ( & mut self , gossip_processing_backlogged : bool ) -> bool {
459
+ if !gossip_processing_backlogged {
460
+ self . received_channel_announce_since_backlogged = false ;
461
+ }
462
+ self . pending_outbound_buffer . len ( ) < OUTBOUND_BUFFER_LIMIT_READ_PAUSE &&
463
+ ( !gossip_processing_backlogged || !self . received_channel_announce_since_backlogged )
454
464
}
455
465
456
466
/// Determines if we should push additional gossip background sync (aka "backfill") onto a peer's
@@ -799,6 +809,8 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
799
809
awaiting_pong_timer_tick_intervals : 0 ,
800
810
received_message_since_timer_tick : false ,
801
811
sent_gossip_timestamp_filter : false ,
812
+
813
+ received_channel_announce_since_backlogged : false ,
802
814
} ) ) . is_some ( ) {
803
815
panic ! ( "PeerManager driver duplicated descriptors!" ) ;
804
816
} ;
@@ -846,14 +858,16 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
846
858
awaiting_pong_timer_tick_intervals : 0 ,
847
859
received_message_since_timer_tick : false ,
848
860
sent_gossip_timestamp_filter : false ,
861
+
862
+ received_channel_announce_since_backlogged : false ,
849
863
} ) ) . is_some ( ) {
850
864
panic ! ( "PeerManager driver duplicated descriptors!" ) ;
851
865
} ;
852
866
Ok ( ( ) )
853
867
}
854
868
855
- fn peer_should_read ( & self , peer : & Peer ) -> bool {
856
- ! self . gossip_processing_backlogged . load ( Ordering :: Relaxed ) && peer . should_read ( )
869
+ fn peer_should_read ( & self , peer : & mut Peer ) -> bool {
870
+ peer . should_read ( self . gossip_processing_backlogged . load ( Ordering :: Relaxed ) )
857
871
}
858
872
859
873
fn update_gossip_backlogged ( & self ) {
@@ -922,10 +936,10 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
922
936
self . maybe_send_extra_ping ( peer) ;
923
937
}
924
938
939
+ let should_read = self . peer_should_read ( peer) ;
925
940
let next_buff = match peer. pending_outbound_buffer . front ( ) {
926
941
None => {
927
942
if force_one_write && !have_written {
928
- let should_read = self . peer_should_read ( & peer) ;
929
943
if should_read {
930
944
let data_sent = descriptor. send_data ( & [ ] , should_read) ;
931
945
debug_assert_eq ! ( data_sent, 0 , "Can't write more than no data" ) ;
@@ -937,7 +951,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
937
951
} ;
938
952
939
953
let pending = & next_buff[ peer. pending_outbound_buffer_first_msg_offset ..] ;
940
- let data_sent = descriptor. send_data ( pending, self . peer_should_read ( & peer ) ) ;
954
+ let data_sent = descriptor. send_data ( pending, should_read ) ;
941
955
have_written = true ;
942
956
peer. pending_outbound_buffer_first_msg_offset += data_sent;
943
957
if peer. pending_outbound_buffer_first_msg_offset == next_buff. len ( ) {
@@ -1220,7 +1234,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
1220
1234
}
1221
1235
}
1222
1236
}
1223
- pause_read = !self . peer_should_read ( & peer) ;
1237
+ pause_read = !self . peer_should_read ( peer) ;
1224
1238
1225
1239
if let Some ( message) = msg_to_handle {
1226
1240
match self . handle_message ( & peer_mutex, peer_lock, message) {
@@ -1306,6 +1320,10 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
1306
1320
return Ok ( None ) ;
1307
1321
}
1308
1322
1323
+ if let wire:: Message :: ChannelAnnouncement ( ref _msg) = message {
1324
+ peer_lock. received_channel_announce_since_backlogged = true ;
1325
+ }
1326
+
1309
1327
mem:: drop ( peer_lock) ;
1310
1328
1311
1329
if is_gossip_msg ( message. type_id ( ) ) {
@@ -1827,7 +1845,9 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
1827
1845
}
1828
1846
1829
1847
for ( descriptor, peer_mutex) in peers. iter ( ) {
1830
- self . do_attempt_write_data ( & mut ( * descriptor) . clone ( ) , & mut * peer_mutex. lock ( ) . unwrap ( ) , flush_read_disabled) ;
1848
+ let mut peer = peer_mutex. lock ( ) . unwrap ( ) ;
1849
+ if flush_read_disabled { peer. received_channel_announce_since_backlogged = false ; }
1850
+ self . do_attempt_write_data ( & mut ( * descriptor) . clone ( ) , & mut * peer, flush_read_disabled) ;
1831
1851
}
1832
1852
}
1833
1853
if !peers_to_disconnect. is_empty ( ) {
@@ -1962,6 +1982,8 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
1962
1982
1963
1983
for ( descriptor, peer_mutex) in peers_lock. iter ( ) {
1964
1984
let mut peer = peer_mutex. lock ( ) . unwrap ( ) ;
1985
+ if flush_read_disabled { peer. received_channel_announce_since_backlogged = false ; }
1986
+
1965
1987
if !peer. channel_encryptor . is_ready_for_encryption ( ) || peer. their_node_id . is_none ( ) {
1966
1988
// The peer needs to complete its handshake before we can exchange messages. We
1967
1989
// give peers one timer tick to complete handshake, reusing
0 commit comments