@@ -500,17 +500,20 @@ struct ClaimablePayments {
500
500
/// quite some time lag.
501
501
enum BackgroundEvent {
502
502
/// Handle a ChannelMonitorUpdate which closes the channel. This is only separated from
503
- /// [`Self::MonitorUpdateRegeneratedOnStartup`] as the non-closing variant needs a public key
504
- /// to handle channel resumption, whereas if the channel has been force-closed we do not need
505
- /// the counterparty node_id.
503
+ /// [`Self::MonitorUpdateRegeneratedOnStartup`] as the maybe- non-closing variant needs a public
504
+ /// key to handle channel resumption, whereas if the channel has been force-closed we do not
505
+ /// need the counterparty node_id.
506
506
///
507
507
/// Note that any such events are lost on shutdown, so in general they must be updates which
508
508
/// are regenerated on startup.
509
509
ClosingMonitorUpdateRegeneratedOnStartup ( ( OutPoint , ChannelMonitorUpdate ) ) ,
510
- /// Handle a ChannelMonitorUpdate which may or may not close the channel. In general this
511
- /// should be used rather than [`Self::ClosingMonitorUpdateRegeneratedOnStartup`], however in
512
- /// cases where the `counterparty_node_id` is not available as the channel has closed from a
513
- /// [`ChannelMonitor`] error the other variant is acceptable.
510
+ /// Handle a ChannelMonitorUpdate which may or may not close the channel and may unblock the
511
+ /// channel to continue normal operation.
512
+ ///
513
+ /// In general this should be used rather than
514
+ /// [`Self::ClosingMonitorUpdateRegeneratedOnStartup`], however in cases where the
515
+ /// `counterparty_node_id` is not available as the channel has closed from a [`ChannelMonitor`]
516
+ /// error the other variant is acceptable.
514
517
///
515
518
/// Note that any such events are lost on shutdown, so in general they must be updates which
516
519
/// are regenerated on startup.
@@ -3798,10 +3801,30 @@ where
3798
3801
// monitor updating completing.
3799
3802
let _ = self . chain_monitor . update_channel ( funding_txo, & update) ;
3800
3803
} ,
3801
- BackgroundEvent :: MonitorUpdateRegeneratedOnStartup { funding_txo, update, .. } => {
3802
- // The channel has already been closed, so no use bothering to care about the
3803
- // monitor updating completing.
3804
- let _ = self . chain_monitor . update_channel ( funding_txo, & update) ;
3804
+ BackgroundEvent :: MonitorUpdateRegeneratedOnStartup { counterparty_node_id, funding_txo, update } => {
3805
+ let update_res = self . chain_monitor . update_channel ( funding_txo, & update) ;
3806
+
3807
+ let res = {
3808
+ let per_peer_state = self . per_peer_state . read ( ) . unwrap ( ) ;
3809
+ if let Some ( peer_state_mutex) = per_peer_state. get ( & counterparty_node_id) {
3810
+ let mut peer_state_lock = peer_state_mutex. lock ( ) . unwrap ( ) ;
3811
+ let peer_state = & mut * peer_state_lock;
3812
+ match peer_state. channel_by_id . entry ( funding_txo. to_channel_id ( ) ) {
3813
+ hash_map:: Entry :: Occupied ( mut chan) => {
3814
+ handle_new_monitor_update ! ( self , update_res, update. update_id, peer_state_lock, peer_state, per_peer_state, chan)
3815
+ } ,
3816
+ hash_map:: Entry :: Vacant ( _) => Ok ( ( ) ) ,
3817
+ }
3818
+ } else { Ok ( ( ) ) }
3819
+ } ;
3820
+ // TODO: If this channel has since closed, we're likely providing a payment
3821
+ // preimage update, which we must ensure is durable! We currently don't,
3822
+ // however, ensure that.
3823
+ if res. is_err ( ) {
3824
+ log_error ! ( self . logger,
3825
+ "Failed to provide ChannelMonitorUpdate to closed channel! This likely lost us a payment preimage!" ) ;
3826
+ }
3827
+ let _ = handle_error ! ( self , res, counterparty_node_id) ;
3805
3828
} ,
3806
3829
}
3807
3830
}
0 commit comments