@@ -3849,7 +3849,7 @@ where
38493849 let mut expected_amt_msat = None ;
38503850 let mut valid_mpp = true ;
38513851 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 ( ) ;
38533853 for htlc in sources. iter ( ) {
38543854 let ( counterparty_node_id, chan_id) = match self . short_to_chan_info . read ( ) . unwrap ( ) . get ( & htlc. prev_hop . short_channel_id ) {
38553855 Some ( ( cp_id, chan_id) ) => ( cp_id. clone ( ) , chan_id. clone ( ) ) ,
@@ -3859,12 +3859,12 @@ where
38593859 }
38603860 } ;
38613861
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) {
38633863 valid_mpp = false ;
38643864 break ;
38653865 }
38663866
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 ( ) ;
38683868 let mut peer_state_lock = peer_state_mutex. lock ( ) . unwrap ( ) ;
38693869 let peer_state = & mut * peer_state_lock;
38703870
@@ -3894,23 +3894,21 @@ where
38943894
38953895 claimable_amt_msat += htlc. value ;
38963896 }
3897+ mem:: drop ( per_peer_state) ;
38973898 if sources. is_empty ( ) || expected_amt_msat. is_none ( ) {
3898- mem:: drop ( per_peer_state) ;
38993899 self . claimable_payments . lock ( ) . unwrap ( ) . pending_claiming_payments . remove ( & payment_hash) ;
39003900 log_info ! ( self . logger, "Attempted to claim an incomplete payment which no longer had any available HTLCs!" ) ;
39013901 return ;
39023902 }
39033903 if claimable_amt_msat != expected_amt_msat. unwrap ( ) {
3904- mem:: drop ( per_peer_state) ;
39053904 self . claimable_payments . lock ( ) . unwrap ( ) . pending_claiming_payments . remove ( & payment_hash) ;
39063905 log_info ! ( self . logger, "Attempted to claim an incomplete payment, expected {} msat, had {} available to claim." ,
39073906 expected_amt_msat. unwrap( ) , claimable_amt_msat) ;
39083907 return ;
39093908 }
39103909 if valid_mpp {
39113910 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 (
39143912 htlc. prev_hop , payment_preimage,
39153913 |_| Some ( MonitorUpdateCompletionAction :: PaymentClaimed { payment_hash } ) )
39163914 {
@@ -3922,7 +3920,6 @@ where
39223920 }
39233921 }
39243922 }
3925- mem:: drop ( per_peer_state) ;
39263923 if !valid_mpp {
39273924 for htlc in sources. drain ( ..) {
39283925 let mut htlc_msat_height_data = htlc. value . to_be_bytes ( ) . to_vec ( ) ;
@@ -3943,20 +3940,20 @@ where
39433940 }
39443941
39453942 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 > > > > ,
39473943 prev_hop : HTLCPreviousHopData , payment_preimage : PaymentPreimage , completion_action : ComplFunc )
39483944 -> Result < ( ) , ( PublicKey , MsgHandleErrInternal ) > {
39493945 //TODO: Delay the claimed_funds relaying just like we do outbound relay!
39503946
3947+ let per_peer_state = self . per_peer_state . read ( ) . unwrap ( ) ;
39513948 let chan_id = prev_hop. outpoint . to_channel_id ( ) ;
39523949
39533950 let counterparty_node_id_opt = match self . short_to_chan_info . read ( ) . unwrap ( ) . get ( & prev_hop. short_channel_id ) {
39543951 Some ( ( cp_id, _dup_chan_id) ) => Some ( cp_id. clone ( ) ) ,
39553952 None => None
39563953 } ;
39573954
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 ( ) ;
39603957 let peer_state = peer_mutex. lock ( ) . unwrap ( ) ;
39613958 let found_channel = peer_state. channel_by_id . contains_key ( & chan_id) ;
39623959 ( found_channel, Some ( peer_state) )
@@ -3977,7 +3974,7 @@ where
39773974 payment_preimage, e) ;
39783975 let err = handle_monitor_update_res ! ( self , e, chan, RAACommitmentOrder :: CommitmentFirst , false , msgs. is_some( ) ) . unwrap_err ( ) ;
39793976 mem:: drop ( peer_state_opt) ;
3980- mem:: drop ( per_peer_state_lock ) ;
3977+ mem:: drop ( per_peer_state ) ;
39813978 self . handle_monitor_update_completion_actions ( completion_action ( Some ( htlc_value_msat) ) ) ;
39823979 return Err ( ( counterparty_node_id, err) ) ;
39833980 }
@@ -3998,7 +3995,7 @@ where
39983995 } ) ;
39993996 }
40003997 mem:: drop ( peer_state_opt) ;
4001- mem:: drop ( per_peer_state_lock ) ;
3998+ mem:: drop ( per_peer_state ) ;
40023999 self . handle_monitor_update_completion_actions ( completion_action ( Some ( htlc_value_msat) ) ) ;
40034000 Ok ( ( ) )
40044001 } else {
@@ -4023,7 +4020,7 @@ where
40234020 chan. remove_entry ( ) ;
40244021 }
40254022 mem:: drop ( peer_state_opt) ;
4026- mem:: drop ( per_peer_state_lock ) ;
4023+ mem:: drop ( per_peer_state ) ;
40274024 self . handle_monitor_update_completion_actions ( completion_action ( None ) ) ;
40284025 Err ( ( counterparty_node_id, res) )
40294026 } ,
@@ -4052,7 +4049,7 @@ where
40524049 payment_preimage, update_res) ;
40534050 }
40544051 mem:: drop ( peer_state_opt) ;
4055- mem:: drop ( per_peer_state_lock ) ;
4052+ mem:: drop ( per_peer_state ) ;
40564053 // Note that we do process the completion action here. This totally could be a
40574054 // duplicate claim, but we have no way of knowing without interrogating the
40584055 // `ChannelMonitor` we've provided the above update to. Instead, note that `Event`s are
@@ -4074,7 +4071,7 @@ where
40744071 } ,
40754072 HTLCSource :: PreviousHopData ( hop_data) => {
40764073 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,
40784075 |htlc_claim_value_msat| {
40794076 if let Some ( forwarded_htlc_value) = forwarded_htlc_value_msat {
40804077 let fee_earned_msat = if let Some ( claimed_htlc_value) = htlc_claim_value_msat {
0 commit comments