@@ -219,7 +219,6 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
219
219
}
220
220
221
221
fn do_read_event ( & self , peer_descriptor : & mut Descriptor , data : Vec < u8 > ) -> Result < bool , PeerHandleError > {
222
- let mut upstream_events = Vec :: new ( ) ;
223
222
let pause_read = {
224
223
let mut peers = self . peers . lock ( ) . unwrap ( ) ;
225
224
let ( should_insert_node_id, pause_read) = match peers. peers . get_mut ( peer_descriptor) {
@@ -463,11 +462,25 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
463
462
None => { }
464
463
} ;
465
464
465
+ pause_read
466
+ } ;
467
+
468
+ self . process_events ( ) ;
469
+
470
+ Ok ( pause_read)
471
+ }
472
+
473
+ /// Checks for any events generated by our handlers and processes them. May be needed after eg
474
+ /// calls to ChannelManager::process_pending_htlc_forward.
475
+ pub fn process_events ( & self ) {
476
+ let mut upstream_events = Vec :: new ( ) ;
477
+ {
466
478
// TODO: There are some DoS attacks here where you can flood someone's outbound send
467
479
// buffer by doing things like announcing channels on another node. We should be willing to
468
480
// drop optional-ish messages when send buffers get full!
469
481
470
482
let mut events_generated = self . message_handler . chan_handler . get_and_clear_pending_events ( ) ;
483
+ let mut peers = self . peers . lock ( ) . unwrap ( ) ;
471
484
for event in events_generated. drain ( ..) {
472
485
macro_rules! get_peer_for_forwarding {
473
486
( $node_id: expr, $handle_no_such_peer: block) => {
@@ -573,16 +586,12 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
573
586
574
587
upstream_events. push ( event) ;
575
588
}
576
-
577
- pause_read
578
- } ;
589
+ }
579
590
580
591
let mut pending_events = self . pending_events . lock ( ) . unwrap ( ) ;
581
592
for event in upstream_events. drain ( ..) {
582
593
pending_events. push ( event) ;
583
594
}
584
-
585
- Ok ( pause_read)
586
595
}
587
596
588
597
/// Indicates that the given socket descriptor's connection is now closed.
0 commit comments