@@ -1159,28 +1159,28 @@ impl<Signer: EcdsaChannelSigner> Writeable for ChannelMonitorImpl<Signer> {
1159
1159
macro_rules! _process_events_body {
1160
1160
( $self_opt: expr, $event_to_handle: expr, $handle_event: expr) => {
1161
1161
loop {
1162
+ let mut handling_res = Ok ( ( ) ) ;
1162
1163
let ( pending_events, repeated_events) ;
1163
1164
if let Some ( us) = $self_opt {
1164
1165
let mut inner = us. inner. lock( ) . unwrap( ) ;
1165
1166
if inner. is_processing_pending_events {
1166
- break ;
1167
+ break handling_res ;
1167
1168
}
1168
1169
inner. is_processing_pending_events = true ;
1169
1170
1170
1171
pending_events = inner. pending_events. clone( ) ;
1171
1172
repeated_events = inner. get_repeated_events( ) ;
1172
- } else { break ; }
1173
+ } else { break handling_res ; }
1173
1174
1174
1175
let mut num_handled_events = 0 ;
1175
- let mut handling_failed = false ;
1176
1176
for event in pending_events. into_iter( ) {
1177
1177
$event_to_handle = event;
1178
1178
match $handle_event {
1179
1179
Ok ( ( ) ) => num_handled_events += 1 ,
1180
- Err ( _ ) => {
1180
+ Err ( e ) => {
1181
1181
// If we encounter an error we stop handling events and make sure to replay
1182
1182
// any unhandled events on the next invocation.
1183
- handling_failed = true ;
1183
+ handling_res = Err ( e ) ;
1184
1184
break ;
1185
1185
}
1186
1186
}
@@ -1197,13 +1197,13 @@ macro_rules! _process_events_body {
1197
1197
let mut inner = us. inner. lock( ) . unwrap( ) ;
1198
1198
inner. pending_events. drain( ..num_handled_events) ;
1199
1199
inner. is_processing_pending_events = false ;
1200
- if !handling_failed && !inner. pending_events. is_empty( ) {
1200
+ if handling_res . is_ok ( ) && !inner. pending_events. is_empty( ) {
1201
1201
// If there's more events to process and we didn't fail so far, go ahead and do
1202
1202
// so.
1203
1203
continue ;
1204
1204
}
1205
1205
}
1206
- break ;
1206
+ break handling_res ;
1207
1207
}
1208
1208
}
1209
1209
}
@@ -1515,21 +1515,23 @@ impl<Signer: EcdsaChannelSigner> ChannelMonitor<Signer> {
1515
1515
/// An [`EventHandler`] may safely call back to the provider, though this shouldn't be needed in
1516
1516
/// order to handle these events.
1517
1517
///
1518
+ /// Will return a [`ReplayEvent`] error if event handling failed and should eventually be retried.
1519
+ ///
1518
1520
/// [`SpendableOutputs`]: crate::events::Event::SpendableOutputs
1519
1521
/// [`BumpTransaction`]: crate::events::Event::BumpTransaction
1520
- pub fn process_pending_events < H : Deref > ( & self , handler : & H ) where H :: Target : EventHandler {
1522
+ pub fn process_pending_events < H : Deref > ( & self , handler : & H ) -> Result < ( ) , ReplayEvent > where H :: Target : EventHandler {
1521
1523
let mut ev;
1522
- process_events_body ! ( Some ( self ) , ev, handler. handle_event( ev) ) ;
1524
+ process_events_body ! ( Some ( self ) , ev, handler. handle_event( ev) )
1523
1525
}
1524
1526
1525
1527
/// Processes any events asynchronously.
1526
1528
///
1527
1529
/// See [`Self::process_pending_events`] for more information.
1528
1530
pub async fn process_pending_events_async < Future : core:: future:: Future < Output = Result < ( ) , ReplayEvent > > , H : Fn ( Event ) -> Future > (
1529
1531
& self , handler : & H
1530
- ) {
1532
+ ) -> Result < ( ) , ReplayEvent > {
1531
1533
let mut ev;
1532
- process_events_body ! ( Some ( self ) , ev, { handler( ev) . await } ) ;
1534
+ process_events_body ! ( Some ( self ) , ev, { handler( ev) . await } )
1533
1535
}
1534
1536
1535
1537
#[ cfg( test) ]
0 commit comments