@@ -1472,7 +1472,7 @@ where
1472
1472
{
1473
1473
let pending_intercepted_msgs_events = self . pending_intercepted_msgs_events . lock ( ) . unwrap ( ) ;
1474
1474
intercepted_msgs = pending_intercepted_msgs_events. clone ( ) ;
1475
- let mut pending_peer_connected_events = self . pending_peer_connected_events . lock ( ) . unwrap ( ) ;
1475
+ let pending_peer_connected_events = self . pending_peer_connected_events . lock ( ) . unwrap ( ) ;
1476
1476
peer_connecteds = pending_peer_connected_events. clone ( ) ;
1477
1477
#[ cfg( debug_assertions) ] {
1478
1478
for ev in pending_intercepted_msgs_events. iter ( ) {
@@ -1482,14 +1482,45 @@ where
1482
1482
if let Event :: OnionMessagePeerConnected { .. } = ev { } else { panic ! ( ) ; }
1483
1483
}
1484
1484
}
1485
- pending_peer_connected_events. shrink_to ( 10 ) ; // Limit total heap usage
1486
1485
}
1487
1486
1488
- let mut res_iter = intercepted_msgs. into_iter ( ) . map ( |ev| handler. handle_event ( ev) ) ;
1489
- drop_handled_events_and_abort ! ( self , res_iter, self . pending_intercepted_msgs_events) ;
1487
+ let mut handling_intercepted_msgs_failed = false ;
1488
+ let mut num_handled_intercepted_events = 0 ;
1489
+ for ev in intercepted_msgs {
1490
+ match handler. handle_event ( ev) {
1491
+ Ok ( ( ) ) => num_handled_intercepted_events += 1 ,
1492
+ Err ( ReplayEvent ( ) ) => {
1493
+ handling_intercepted_msgs_failed = true ;
1494
+ break ;
1495
+ }
1496
+ }
1497
+ }
1498
+
1499
+ {
1500
+ let mut pending_intercepted_msgs_events = self . pending_intercepted_msgs_events . lock ( ) . unwrap ( ) ;
1501
+ pending_intercepted_msgs_events. drain ( ..num_handled_intercepted_events) ;
1502
+ }
1490
1503
1491
- let mut res_iter = peer_connecteds. into_iter ( ) . map ( |ev| handler. handle_event ( ev) ) ;
1492
- drop_handled_events_and_abort ! ( self , res_iter, self . pending_peer_connected_events) ;
1504
+ if handling_intercepted_msgs_failed {
1505
+ self . pending_events_processor . store ( false , Ordering :: Release ) ;
1506
+ return ;
1507
+ }
1508
+
1509
+ let mut num_handled_peer_connecteds = 0 ;
1510
+ for ev in peer_connecteds {
1511
+ match handler. handle_event ( ev) {
1512
+ Ok ( ( ) ) => num_handled_peer_connecteds += 1 ,
1513
+ Err ( ReplayEvent ( ) ) => {
1514
+ break ;
1515
+ }
1516
+ }
1517
+ }
1518
+
1519
+ {
1520
+ let mut pending_peer_connected_events = self . pending_peer_connected_events . lock ( ) . unwrap ( ) ;
1521
+ pending_peer_connected_events. drain ( ..num_handled_peer_connecteds) ;
1522
+ pending_peer_connected_events. shrink_to ( 10 ) ; // Limit total heap usage
1523
+ }
1493
1524
1494
1525
self . pending_events_processor . store ( false , Ordering :: Release ) ;
1495
1526
}
0 commit comments