@@ -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,15 +2267,15 @@ 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
let update = self . build_commitment_no_status_check ( logger) ;
2280
- self . context . pending_monitor_updates . push ( PendingChannelMonitorUpdate {
2278
+ self . context . blocked_monitor_updates . push ( PendingChannelMonitorUpdate {
2281
2279
update,
2282
2280
} ) ;
2283
2281
}
@@ -4398,25 +4396,25 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
4398
4396
4399
4397
/// Gets the latest [`ChannelMonitorUpdate`] ID which has been released and is in-flight.
4400
4398
pub fn get_latest_unblocked_monitor_update_id ( & self ) -> u64 {
4401
- if self . context . pending_monitor_updates . is_empty ( ) { return self . context . get_latest_monitor_update_id ( ) ; }
4402
- self . context . pending_monitor_updates [ 0 ] . update . update_id - 1
4399
+ if self . context . blocked_monitor_updates . is_empty ( ) { return self . context . get_latest_monitor_update_id ( ) ; }
4400
+ self . context . blocked_monitor_updates [ 0 ] . update . update_id - 1
4403
4401
}
4404
4402
4405
4403
/// Returns the next blocked monitor update, if one exists, and a bool which indicates a
4406
4404
/// further blocked monitor update exists after the next.
4407
4405
pub fn unblock_next_blocked_monitor_update ( & mut self ) -> Option < ( ChannelMonitorUpdate , bool ) > {
4408
- if self . context . pending_monitor_updates . is_empty ( ) { return None ; }
4409
- Some ( ( self . context . pending_monitor_updates . remove ( 0 ) . update ,
4410
- !self . context . pending_monitor_updates . is_empty ( ) ) )
4406
+ if self . context . blocked_monitor_updates . is_empty ( ) { return None ; }
4407
+ Some ( ( self . context . blocked_monitor_updates . remove ( 0 ) . update ,
4408
+ !self . context . blocked_monitor_updates . is_empty ( ) ) )
4411
4409
}
4412
4410
4413
4411
/// Pushes a new monitor update into our monitor update queue, returning it if it should be
4414
4412
/// immediately given to the user for persisting or `None` if it should be held as blocked.
4415
4413
fn push_ret_blockable_mon_update ( & mut self , update : ChannelMonitorUpdate )
4416
4414
-> Option < ChannelMonitorUpdate > {
4417
- let release_monitor = self . context . pending_monitor_updates . is_empty ( ) ;
4415
+ let release_monitor = self . context . blocked_monitor_updates . is_empty ( ) ;
4418
4416
if !release_monitor {
4419
- self . context . pending_monitor_updates . push ( PendingChannelMonitorUpdate {
4417
+ self . context . blocked_monitor_updates . push ( PendingChannelMonitorUpdate {
4420
4418
update,
4421
4419
} ) ;
4422
4420
None
@@ -4426,7 +4424,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
4426
4424
}
4427
4425
4428
4426
pub fn blocked_monitor_updates_pending ( & self ) -> usize {
4429
- self . context . pending_monitor_updates . len ( )
4427
+ self . context . blocked_monitor_updates . len ( )
4430
4428
}
4431
4429
4432
4430
/// Returns true if the channel is awaiting the persistence of the initial ChannelMonitor.
@@ -5571,7 +5569,7 @@ impl<Signer: WriteableEcdsaChannelSigner> OutboundV1Channel<Signer> {
5571
5569
channel_type,
5572
5570
channel_keys_id,
5573
5571
5574
- pending_monitor_updates : Vec :: new ( ) ,
5572
+ blocked_monitor_updates : Vec :: new ( ) ,
5575
5573
}
5576
5574
} )
5577
5575
}
@@ -6201,7 +6199,7 @@ impl<Signer: WriteableEcdsaChannelSigner> InboundV1Channel<Signer> {
6201
6199
channel_type,
6202
6200
channel_keys_id,
6203
6201
6204
- pending_monitor_updates : Vec :: new ( ) ,
6202
+ blocked_monitor_updates : Vec :: new ( ) ,
6205
6203
}
6206
6204
} ;
6207
6205
@@ -6767,7 +6765,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Writeable for Channel<Signer> {
6767
6765
( 28 , holder_max_accepted_htlcs, option) ,
6768
6766
( 29 , self . context. temporary_channel_id, option) ,
6769
6767
( 31 , channel_pending_event_emitted, option) ,
6770
- ( 33 , self . context. pending_monitor_updates , vec_type) ,
6768
+ ( 33 , self . context. blocked_monitor_updates , vec_type) ,
6771
6769
} ) ;
6772
6770
6773
6771
Ok ( ( ) )
@@ -7044,7 +7042,7 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
7044
7042
let mut temporary_channel_id: Option < [ u8 ; 32 ] > = None ;
7045
7043
let mut holder_max_accepted_htlcs: Option < u16 > = None ;
7046
7044
7047
- let mut pending_monitor_updates = Some ( Vec :: new ( ) ) ;
7045
+ let mut blocked_monitor_updates = Some ( Vec :: new ( ) ) ;
7048
7046
7049
7047
read_tlv_fields ! ( reader, {
7050
7048
( 0 , announcement_sigs, option) ,
@@ -7068,7 +7066,7 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
7068
7066
( 28 , holder_max_accepted_htlcs, option) ,
7069
7067
( 29 , temporary_channel_id, option) ,
7070
7068
( 31 , channel_pending_event_emitted, option) ,
7071
- ( 33 , pending_monitor_updates , vec_type) ,
7069
+ ( 33 , blocked_monitor_updates , vec_type) ,
7072
7070
} ) ;
7073
7071
7074
7072
let ( channel_keys_id, holder_signer) = if let Some ( channel_keys_id) = channel_keys_id {
@@ -7240,7 +7238,7 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
7240
7238
channel_type : channel_type. unwrap ( ) ,
7241
7239
channel_keys_id,
7242
7240
7243
- pending_monitor_updates : pending_monitor_updates . unwrap ( ) ,
7241
+ blocked_monitor_updates : blocked_monitor_updates . unwrap ( ) ,
7244
7242
}
7245
7243
} )
7246
7244
}
0 commit comments