@@ -859,11 +859,9 @@ pub(super) struct ChannelContext<Signer: ChannelSigner> {
859
859
/// [`SignerProvider::derive_channel_signer`].
860
860
channel_keys_id : [ u8 ; 32 ] ,
861
861
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 > ,
867
865
}
868
866
869
867
impl < Signer : ChannelSigner > ChannelContext < Signer > {
@@ -2254,7 +2252,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
2254
2252
}
2255
2253
2256
2254
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 ( ) ;
2258
2256
match self . get_update_fulfill_htlc ( htlc_id, payment_preimage, logger) {
2259
2257
UpdateFulfillFetch :: NewClaim { mut monitor_update, htlc_value_msat, msg } => {
2260
2258
// Even if we aren't supposed to let new monitor updates with commitment state
@@ -2269,16 +2267,16 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
2269
2267
self . context . latest_monitor_update_id = monitor_update. update_id ;
2270
2268
monitor_update. updates . append ( & mut additional_update. updates ) ;
2271
2269
} 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 )
2273
2271
. map ( |upd| upd. update . update_id ) . unwrap_or ( monitor_update. update_id ) ;
2274
2272
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 ( ) {
2276
2274
held_update. update . update_id += 1 ;
2277
2275
}
2278
2276
if msg. is_some ( ) {
2279
2277
debug_assert ! ( false , "If there is a pending blocked monitor we should have MonitorUpdateInProgress set" ) ;
2280
2278
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 {
2282
2280
update,
2283
2281
} ) ;
2284
2282
}
@@ -4399,25 +4397,25 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
4399
4397
4400
4398
/// Gets the latest [`ChannelMonitorUpdate`] ID which has been released and is in-flight.
4401
4399
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
4404
4402
}
4405
4403
4406
4404
/// Returns the next blocked monitor update, if one exists, and a bool which indicates a
4407
4405
/// further blocked monitor update exists after the next.
4408
4406
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 ( ) ) )
4412
4410
}
4413
4411
4414
4412
/// Pushes a new monitor update into our monitor update queue, returning it if it should be
4415
4413
/// immediately given to the user for persisting or `None` if it should be held as blocked.
4416
4414
fn push_ret_blockable_mon_update ( & mut self , update : ChannelMonitorUpdate )
4417
4415
-> Option < ChannelMonitorUpdate > {
4418
- let release_monitor = self . context . pending_monitor_updates . is_empty ( ) ;
4416
+ let release_monitor = self . context . blocked_monitor_updates . is_empty ( ) ;
4419
4417
if !release_monitor {
4420
- self . context . pending_monitor_updates . push ( PendingChannelMonitorUpdate {
4418
+ self . context . blocked_monitor_updates . push ( PendingChannelMonitorUpdate {
4421
4419
update,
4422
4420
} ) ;
4423
4421
None
@@ -4427,7 +4425,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
4427
4425
}
4428
4426
4429
4427
pub fn blocked_monitor_updates_pending ( & self ) -> usize {
4430
- self . context . pending_monitor_updates . len ( )
4428
+ self . context . blocked_monitor_updates . len ( )
4431
4429
}
4432
4430
4433
4431
/// Returns true if the channel is awaiting the persistence of the initial ChannelMonitor.
@@ -5572,7 +5570,7 @@ impl<Signer: WriteableEcdsaChannelSigner> OutboundV1Channel<Signer> {
5572
5570
channel_type,
5573
5571
channel_keys_id,
5574
5572
5575
- pending_monitor_updates : Vec :: new ( ) ,
5573
+ blocked_monitor_updates : Vec :: new ( ) ,
5576
5574
}
5577
5575
} )
5578
5576
}
@@ -6202,7 +6200,7 @@ impl<Signer: WriteableEcdsaChannelSigner> InboundV1Channel<Signer> {
6202
6200
channel_type,
6203
6201
channel_keys_id,
6204
6202
6205
- pending_monitor_updates : Vec :: new ( ) ,
6203
+ blocked_monitor_updates : Vec :: new ( ) ,
6206
6204
}
6207
6205
} ;
6208
6206
@@ -6768,7 +6766,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Writeable for Channel<Signer> {
6768
6766
( 28 , holder_max_accepted_htlcs, option) ,
6769
6767
( 29 , self . context. temporary_channel_id, option) ,
6770
6768
( 31 , channel_pending_event_emitted, option) ,
6771
- ( 33 , self . context. pending_monitor_updates , vec_type) ,
6769
+ ( 33 , self . context. blocked_monitor_updates , vec_type) ,
6772
6770
} ) ;
6773
6771
6774
6772
Ok ( ( ) )
@@ -7045,7 +7043,7 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
7045
7043
let mut temporary_channel_id: Option < [ u8 ; 32 ] > = None ;
7046
7044
let mut holder_max_accepted_htlcs: Option < u16 > = None ;
7047
7045
7048
- let mut pending_monitor_updates = Some ( Vec :: new ( ) ) ;
7046
+ let mut blocked_monitor_updates = Some ( Vec :: new ( ) ) ;
7049
7047
7050
7048
read_tlv_fields ! ( reader, {
7051
7049
( 0 , announcement_sigs, option) ,
@@ -7069,7 +7067,7 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
7069
7067
( 28 , holder_max_accepted_htlcs, option) ,
7070
7068
( 29 , temporary_channel_id, option) ,
7071
7069
( 31 , channel_pending_event_emitted, option) ,
7072
- ( 33 , pending_monitor_updates , vec_type) ,
7070
+ ( 33 , blocked_monitor_updates , vec_type) ,
7073
7071
} ) ;
7074
7072
7075
7073
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
7241
7239
channel_type : channel_type. unwrap ( ) ,
7242
7240
channel_keys_id,
7243
7241
7244
- pending_monitor_updates : pending_monitor_updates . unwrap ( ) ,
7242
+ blocked_monitor_updates : blocked_monitor_updates . unwrap ( ) ,
7245
7243
}
7246
7244
} )
7247
7245
}
0 commit comments