@@ -3849,7 +3849,7 @@ where
3849
3849
let mut expected_amt_msat = None ;
3850
3850
let mut valid_mpp = true ;
3851
3851
let mut errs = Vec :: new ( ) ;
3852
- let mut per_peer_state = Some ( self . per_peer_state . read ( ) . unwrap ( ) ) ;
3852
+ let per_peer_state = self . per_peer_state . read ( ) . unwrap ( ) ;
3853
3853
for htlc in sources. iter ( ) {
3854
3854
let ( counterparty_node_id, chan_id) = match self . short_to_chan_info . read ( ) . unwrap ( ) . get ( & htlc. prev_hop . short_channel_id ) {
3855
3855
Some ( ( cp_id, chan_id) ) => ( cp_id. clone ( ) , chan_id. clone ( ) ) ,
@@ -3859,12 +3859,12 @@ where
3859
3859
}
3860
3860
} ;
3861
3861
3862
- if let None = per_peer_state. as_ref ( ) . unwrap ( ) . get ( & counterparty_node_id) {
3862
+ if let None = per_peer_state. get ( & counterparty_node_id) {
3863
3863
valid_mpp = false ;
3864
3864
break ;
3865
3865
}
3866
3866
3867
- let peer_state_mutex = per_peer_state. as_ref ( ) . unwrap ( ) . get ( & counterparty_node_id) . unwrap ( ) ;
3867
+ let peer_state_mutex = per_peer_state. get ( & counterparty_node_id) . unwrap ( ) ;
3868
3868
let mut peer_state_lock = peer_state_mutex. lock ( ) . unwrap ( ) ;
3869
3869
let peer_state = & mut * peer_state_lock;
3870
3870
@@ -3894,23 +3894,21 @@ where
3894
3894
3895
3895
claimable_amt_msat += htlc. value ;
3896
3896
}
3897
+ mem:: drop ( per_peer_state) ;
3897
3898
if sources. is_empty ( ) || expected_amt_msat. is_none ( ) {
3898
- mem:: drop ( per_peer_state) ;
3899
3899
self . claimable_payments . lock ( ) . unwrap ( ) . pending_claiming_payments . remove ( & payment_hash) ;
3900
3900
log_info ! ( self . logger, "Attempted to claim an incomplete payment which no longer had any available HTLCs!" ) ;
3901
3901
return ;
3902
3902
}
3903
3903
if claimable_amt_msat != expected_amt_msat. unwrap ( ) {
3904
- mem:: drop ( per_peer_state) ;
3905
3904
self . claimable_payments . lock ( ) . unwrap ( ) . pending_claiming_payments . remove ( & payment_hash) ;
3906
3905
log_info ! ( self . logger, "Attempted to claim an incomplete payment, expected {} msat, had {} available to claim." ,
3907
3906
expected_amt_msat. unwrap( ) , claimable_amt_msat) ;
3908
3907
return ;
3909
3908
}
3910
3909
if valid_mpp {
3911
3910
for htlc in sources. drain ( ..) {
3912
- if per_peer_state. is_none ( ) { per_peer_state = Some ( self . per_peer_state . read ( ) . unwrap ( ) ) ; }
3913
- if let Err ( ( pk, err) ) = self . claim_funds_from_hop ( per_peer_state. take ( ) . unwrap ( ) ,
3911
+ if let Err ( ( pk, err) ) = self . claim_funds_from_hop (
3914
3912
htlc. prev_hop , payment_preimage,
3915
3913
|_| Some ( MonitorUpdateCompletionAction :: PaymentClaimed { payment_hash } ) )
3916
3914
{
@@ -3922,7 +3920,6 @@ where
3922
3920
}
3923
3921
}
3924
3922
}
3925
- mem:: drop ( per_peer_state) ;
3926
3923
if !valid_mpp {
3927
3924
for htlc in sources. drain ( ..) {
3928
3925
let mut htlc_msat_height_data = htlc. value . to_be_bytes ( ) . to_vec ( ) ;
@@ -3943,20 +3940,20 @@ where
3943
3940
}
3944
3941
3945
3942
fn claim_funds_from_hop < ComplFunc : FnOnce ( Option < u64 > ) -> Option < MonitorUpdateCompletionAction > > ( & self ,
3946
- per_peer_state_lock : RwLockReadGuard < HashMap < PublicKey , Mutex < PeerState < <SP :: Target as SignerProvider >:: Signer > > > > ,
3947
3943
prev_hop : HTLCPreviousHopData , payment_preimage : PaymentPreimage , completion_action : ComplFunc )
3948
3944
-> Result < ( ) , ( PublicKey , MsgHandleErrInternal ) > {
3949
3945
//TODO: Delay the claimed_funds relaying just like we do outbound relay!
3950
3946
3947
+ let per_peer_state = self . per_peer_state . read ( ) . unwrap ( ) ;
3951
3948
let chan_id = prev_hop. outpoint . to_channel_id ( ) ;
3952
3949
3953
3950
let counterparty_node_id_opt = match self . short_to_chan_info . read ( ) . unwrap ( ) . get ( & prev_hop. short_channel_id ) {
3954
3951
Some ( ( cp_id, _dup_chan_id) ) => Some ( cp_id. clone ( ) ) ,
3955
3952
None => None
3956
3953
} ;
3957
3954
3958
- let ( found_channel, mut peer_state_opt) = if counterparty_node_id_opt. is_some ( ) && per_peer_state_lock . get ( & counterparty_node_id_opt. unwrap ( ) ) . is_some ( ) {
3959
- let peer_mutex = per_peer_state_lock . get ( & counterparty_node_id_opt. unwrap ( ) ) . unwrap ( ) ;
3955
+ let ( found_channel, mut peer_state_opt) = if counterparty_node_id_opt. is_some ( ) && per_peer_state . get ( & counterparty_node_id_opt. unwrap ( ) ) . is_some ( ) {
3956
+ let peer_mutex = per_peer_state . get ( & counterparty_node_id_opt. unwrap ( ) ) . unwrap ( ) ;
3960
3957
let peer_state = peer_mutex. lock ( ) . unwrap ( ) ;
3961
3958
let found_channel = peer_state. channel_by_id . contains_key ( & chan_id) ;
3962
3959
( found_channel, Some ( peer_state) )
@@ -3977,7 +3974,7 @@ where
3977
3974
payment_preimage, e) ;
3978
3975
let err = handle_monitor_update_res ! ( self , e, chan, RAACommitmentOrder :: CommitmentFirst , false , msgs. is_some( ) ) . unwrap_err ( ) ;
3979
3976
mem:: drop ( peer_state_opt) ;
3980
- mem:: drop ( per_peer_state_lock ) ;
3977
+ mem:: drop ( per_peer_state ) ;
3981
3978
self . handle_monitor_update_completion_actions ( completion_action ( Some ( htlc_value_msat) ) ) ;
3982
3979
return Err ( ( counterparty_node_id, err) ) ;
3983
3980
}
@@ -3998,7 +3995,7 @@ where
3998
3995
} ) ;
3999
3996
}
4000
3997
mem:: drop ( peer_state_opt) ;
4001
- mem:: drop ( per_peer_state_lock ) ;
3998
+ mem:: drop ( per_peer_state ) ;
4002
3999
self . handle_monitor_update_completion_actions ( completion_action ( Some ( htlc_value_msat) ) ) ;
4003
4000
Ok ( ( ) )
4004
4001
} else {
@@ -4023,7 +4020,7 @@ where
4023
4020
chan. remove_entry ( ) ;
4024
4021
}
4025
4022
mem:: drop ( peer_state_opt) ;
4026
- mem:: drop ( per_peer_state_lock ) ;
4023
+ mem:: drop ( per_peer_state ) ;
4027
4024
self . handle_monitor_update_completion_actions ( completion_action ( None ) ) ;
4028
4025
Err ( ( counterparty_node_id, res) )
4029
4026
} ,
@@ -4052,7 +4049,7 @@ where
4052
4049
payment_preimage, update_res) ;
4053
4050
}
4054
4051
mem:: drop ( peer_state_opt) ;
4055
- mem:: drop ( per_peer_state_lock ) ;
4052
+ mem:: drop ( per_peer_state ) ;
4056
4053
// Note that we do process the completion action here. This totally could be a
4057
4054
// duplicate claim, but we have no way of knowing without interrogating the
4058
4055
// `ChannelMonitor` we've provided the above update to. Instead, note that `Event`s are
@@ -4074,7 +4071,7 @@ where
4074
4071
} ,
4075
4072
HTLCSource :: PreviousHopData ( hop_data) => {
4076
4073
let prev_outpoint = hop_data. outpoint ;
4077
- let res = self . claim_funds_from_hop ( self . per_peer_state . read ( ) . unwrap ( ) , hop_data, payment_preimage,
4074
+ let res = self . claim_funds_from_hop ( hop_data, payment_preimage,
4078
4075
|htlc_claim_value_msat| {
4079
4076
if let Some ( forwarded_htlc_value) = forwarded_htlc_value_msat {
4080
4077
let fee_earned_msat = if let Some ( claimed_htlc_value) = htlc_claim_value_msat {
0 commit comments