@@ -859,11 +859,9 @@ pub(super) struct ChannelContext<Signer: ChannelSigner> {
859859 /// [`SignerProvider::derive_channel_signer`].
860860 channel_keys_id : [ u8 ; 32 ] ,
861861
862- /// When we generate [`ChannelMonitorUpdate`]s to persist, they may not be persisted immediately.
863- /// If we then persist the [`channelmanager::ChannelManager`] and crash before the persistence
864- /// completes we still need to be able to complete the persistence. Thus, we have to keep a
865- /// copy of the [`ChannelMonitorUpdate`] here until it is complete.
866- pending_monitor_updates : Vec < PendingChannelMonitorUpdate > ,
862+ /// If we can't release a [`ChannelMonitorUpdate`] until some external action completes, we
863+ /// store it here and only release it to [`ChannelManager`] once it asks for it.
864+ blocked_monitor_updates : Vec < PendingChannelMonitorUpdate > ,
867865}
868866
869867impl < Signer : ChannelSigner > ChannelContext < Signer > {
@@ -2254,7 +2252,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
22542252 }
22552253
22562254 pub fn get_update_fulfill_htlc_and_commit < L : Deref > ( & mut self , htlc_id : u64 , payment_preimage : PaymentPreimage , logger : & L ) -> UpdateFulfillCommitFetch where L :: Target : Logger {
2257- let release_cs_monitor = self . context . pending_monitor_updates . is_empty ( ) ;
2255+ let release_cs_monitor = self . context . blocked_monitor_updates . is_empty ( ) ;
22582256 match self . get_update_fulfill_htlc ( htlc_id, payment_preimage, logger) {
22592257 UpdateFulfillFetch :: NewClaim { mut monitor_update, htlc_value_msat, msg } => {
22602258 // Even if we aren't supposed to let new monitor updates with commitment state
@@ -2269,16 +2267,16 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
22692267 self . context . latest_monitor_update_id = monitor_update. update_id ;
22702268 monitor_update. updates . append ( & mut additional_update. updates ) ;
22712269 } else {
2272- let new_mon_id = self . context . pending_monitor_updates . get ( 0 )
2270+ let new_mon_id = self . context . blocked_monitor_updates . get ( 0 )
22732271 . map ( |upd| upd. update . update_id ) . unwrap_or ( monitor_update. update_id ) ;
22742272 monitor_update. update_id = new_mon_id;
2275- for held_update in self . context . pending_monitor_updates . iter_mut ( ) {
2273+ for held_update in self . context . blocked_monitor_updates . iter_mut ( ) {
22762274 held_update. update . update_id += 1 ;
22772275 }
22782276 if msg. is_some ( ) {
22792277 debug_assert ! ( false , "If there is a pending blocked monitor we should have MonitorUpdateInProgress set" ) ;
22802278 let update = self . build_commitment_no_status_check ( logger) ;
2281- self . context . pending_monitor_updates . push ( PendingChannelMonitorUpdate {
2279+ self . context . blocked_monitor_updates . push ( PendingChannelMonitorUpdate {
22822280 update,
22832281 } ) ;
22842282 }
@@ -4399,25 +4397,25 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
43994397
44004398 /// Gets the latest [`ChannelMonitorUpdate`] ID which has been released and is in-flight.
44014399 pub fn get_latest_unblocked_monitor_update_id ( & self ) -> u64 {
4402- if self . context . pending_monitor_updates . is_empty ( ) { return self . context . get_latest_monitor_update_id ( ) ; }
4403- self . context . pending_monitor_updates [ 0 ] . update . update_id - 1
4400+ if self . context . blocked_monitor_updates . is_empty ( ) { return self . context . get_latest_monitor_update_id ( ) ; }
4401+ self . context . blocked_monitor_updates [ 0 ] . update . update_id - 1
44044402 }
44054403
44064404 /// Returns the next blocked monitor update, if one exists, and a bool which indicates a
44074405 /// further blocked monitor update exists after the next.
44084406 pub fn unblock_next_blocked_monitor_update ( & mut self ) -> Option < ( ChannelMonitorUpdate , bool ) > {
4409- if self . context . pending_monitor_updates . is_empty ( ) { return None ; }
4410- Some ( ( self . context . pending_monitor_updates . remove ( 0 ) . update ,
4411- !self . context . pending_monitor_updates . is_empty ( ) ) )
4407+ if self . context . blocked_monitor_updates . is_empty ( ) { return None ; }
4408+ Some ( ( self . context . blocked_monitor_updates . remove ( 0 ) . update ,
4409+ !self . context . blocked_monitor_updates . is_empty ( ) ) )
44124410 }
44134411
44144412 /// Pushes a new monitor update into our monitor update queue, returning it if it should be
44154413 /// immediately given to the user for persisting or `None` if it should be held as blocked.
44164414 fn push_ret_blockable_mon_update ( & mut self , update : ChannelMonitorUpdate )
44174415 -> Option < ChannelMonitorUpdate > {
4418- let release_monitor = self . context . pending_monitor_updates . is_empty ( ) ;
4416+ let release_monitor = self . context . blocked_monitor_updates . is_empty ( ) ;
44194417 if !release_monitor {
4420- self . context . pending_monitor_updates . push ( PendingChannelMonitorUpdate {
4418+ self . context . blocked_monitor_updates . push ( PendingChannelMonitorUpdate {
44214419 update,
44224420 } ) ;
44234421 None
@@ -4427,7 +4425,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
44274425 }
44284426
44294427 pub fn blocked_monitor_updates_pending ( & self ) -> usize {
4430- self . context . pending_monitor_updates . len ( )
4428+ self . context . blocked_monitor_updates . len ( )
44314429 }
44324430
44334431 /// Returns true if the channel is awaiting the persistence of the initial ChannelMonitor.
@@ -5572,7 +5570,7 @@ impl<Signer: WriteableEcdsaChannelSigner> OutboundV1Channel<Signer> {
55725570 channel_type,
55735571 channel_keys_id,
55745572
5575- pending_monitor_updates : Vec :: new ( ) ,
5573+ blocked_monitor_updates : Vec :: new ( ) ,
55765574 }
55775575 } )
55785576 }
@@ -6202,7 +6200,7 @@ impl<Signer: WriteableEcdsaChannelSigner> InboundV1Channel<Signer> {
62026200 channel_type,
62036201 channel_keys_id,
62046202
6205- pending_monitor_updates : Vec :: new ( ) ,
6203+ blocked_monitor_updates : Vec :: new ( ) ,
62066204 }
62076205 } ;
62086206
@@ -6768,7 +6766,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Writeable for Channel<Signer> {
67686766 ( 28 , holder_max_accepted_htlcs, option) ,
67696767 ( 29 , self . context. temporary_channel_id, option) ,
67706768 ( 31 , channel_pending_event_emitted, option) ,
6771- ( 33 , self . context. pending_monitor_updates , vec_type) ,
6769+ ( 33 , self . context. blocked_monitor_updates , vec_type) ,
67726770 } ) ;
67736771
67746772 Ok ( ( ) )
@@ -7045,7 +7043,7 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
70457043 let mut temporary_channel_id: Option < [ u8 ; 32 ] > = None ;
70467044 let mut holder_max_accepted_htlcs: Option < u16 > = None ;
70477045
7048- let mut pending_monitor_updates = Some ( Vec :: new ( ) ) ;
7046+ let mut blocked_monitor_updates = Some ( Vec :: new ( ) ) ;
70497047
70507048 read_tlv_fields ! ( reader, {
70517049 ( 0 , announcement_sigs, option) ,
@@ -7069,7 +7067,7 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
70697067 ( 28 , holder_max_accepted_htlcs, option) ,
70707068 ( 29 , temporary_channel_id, option) ,
70717069 ( 31 , channel_pending_event_emitted, option) ,
7072- ( 33 , pending_monitor_updates , vec_type) ,
7070+ ( 33 , blocked_monitor_updates , vec_type) ,
70737071 } ) ;
70747072
70757073 let ( channel_keys_id, holder_signer) = if let Some ( channel_keys_id) = channel_keys_id {
@@ -7241,7 +7239,7 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
72417239 channel_type : channel_type. unwrap ( ) ,
72427240 channel_keys_id,
72437241
7244- pending_monitor_updates : pending_monitor_updates . unwrap ( ) ,
7242+ blocked_monitor_updates : blocked_monitor_updates . unwrap ( ) ,
72457243 }
72467244 } )
72477245 }
0 commit comments