Skip to content

Commit 1a5482a

Browse files
Don't pass per_peer_state to claim_funds_from_hop
1 parent 9033b43 commit 1a5482a

File tree

1 file changed

+13
-16
lines changed

1 file changed

+13
-16
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)