projects
/
rust-lightning
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
5588eeb
)
Move `claimable_htlcs` to a struct for more fields in the same mutex
author
Matt Corallo
<git@bluematt.me>
Tue, 6 Dec 2022 18:51:49 +0000
(18:51 +0000)
committer
Matt Corallo
<git@bluematt.me>
Tue, 6 Dec 2022 19:00:17 +0000
(19:00 +0000)
lightning/src/ln/channelmanager.rs
patch
|
blob
|
history
diff --git
a/lightning/src/ln/channelmanager.rs
b/lightning/src/ln/channelmanager.rs
index 410386aa076808e3c1398f27a9c699a043ab3284..3007f736c0b9978eac30b6a9712c04974e192ee0 100644
(file)
--- a/
lightning/src/ln/channelmanager.rs
+++ b/
lightning/src/ln/channelmanager.rs
@@
-424,6
+424,16
@@
pub(super) enum RAACommitmentOrder {
RevokeAndACKFirst,
}
RevokeAndACKFirst,
}
+/// Information about claimable or being-claimed payments
+struct ClaimablePayments {
+ /// Map from payment hash to the payment data and any HTLCs which are to us and can be
+ /// failed/claimed by the user.
+ ///
+ /// Note that, no consistency guarantees are made about the channels given here actually
+ /// existing anymore by the time you go to read them!
+ claimable_htlcs: HashMap<PaymentHash, (events::PaymentPurpose, Vec<ClaimableHTLC>)>,
+}
+
// Note this is only exposed in cfg(test):
pub(super) struct ChannelHolder<Signer: Sign> {
pub(super) by_id: HashMap<[u8; 32], Channel<Signer>>,
// Note this is only exposed in cfg(test):
pub(super) struct ChannelHolder<Signer: Sign> {
pub(super) by_id: HashMap<[u8; 32], Channel<Signer>>,
@@
-699,7
+709,7
@@
pub type SimpleRefChannelManager<'a, 'b, 'c, 'd, 'e, M, T, F, L> = ChannelManage
// |
// |__`pending_inbound_payments`
// | |
// |
// |__`pending_inbound_payments`
// | |
-// | |__`claimable_
htlc
s`
+// | |__`claimable_
payment
s`
// | |
// | |__`pending_outbound_payments`
// | |
// | |
// | |__`pending_outbound_payments`
// | |
@@
-787,14
+797,11
@@
pub struct ChannelManager<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref>
/// See `ChannelManager` struct-level documentation for lock order requirements.
pending_intercepted_htlcs: Mutex<HashMap<InterceptId, PendingAddHTLCInfo>>,
/// See `ChannelManager` struct-level documentation for lock order requirements.
pending_intercepted_htlcs: Mutex<HashMap<InterceptId, PendingAddHTLCInfo>>,
- /// Map from payment hash to the payment data and any HTLCs which are to us and can be
- /// failed/claimed by the user.
- ///
- /// Note that, no consistency guarantees are made about the channels given here actually
- /// existing anymore by the time you go to read them!
+ /// The sets of payments which are claimable or currently being claimed. See
+ /// [`ClaimablePayments`]' individual field docs for more info.
///
/// See `ChannelManager` struct-level documentation for lock order requirements.
///
/// See `ChannelManager` struct-level documentation for lock order requirements.
- claimable_
htlcs: Mutex<HashMap<PaymentHash, (events::PaymentPurpose, Vec<ClaimableHTLC>)>
>,
+ claimable_
payments: Mutex<ClaimablePayments
>,
/// The set of outbound SCID aliases across all our channels, including unconfirmed channels
/// and some closed channels which reached a usable state prior to being closed. This is used
/// The set of outbound SCID aliases across all our channels, including unconfirmed channels
/// and some closed channels which reached a usable state prior to being closed. This is used
@@
-1600,7
+1607,7
@@
impl<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelManager<M, T, K, F
pending_inbound_payments: Mutex::new(HashMap::new()),
pending_outbound_payments: Mutex::new(HashMap::new()),
forward_htlcs: Mutex::new(HashMap::new()),
pending_inbound_payments: Mutex::new(HashMap::new()),
pending_outbound_payments: Mutex::new(HashMap::new()),
forward_htlcs: Mutex::new(HashMap::new()),
- claimable_
htlcs: Mutex::new(HashMap::new()
),
+ claimable_
payments: Mutex::new(ClaimablePayments { claimable_htlcs: HashMap::new() }
),
pending_intercepted_htlcs: Mutex::new(HashMap::new()),
id_to_peer: Mutex::new(HashMap::new()),
short_to_chan_info: FairRwLock::new(HashMap::new()),
pending_intercepted_htlcs: Mutex::new(HashMap::new()),
id_to_peer: Mutex::new(HashMap::new()),
short_to_chan_info: FairRwLock::new(HashMap::new()),
@@
-3483,8
+3490,8
@@
impl<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelManager<M, T, K, F
payment_secret: $payment_data.payment_secret,
}
};
payment_secret: $payment_data.payment_secret,
}
};
- let mut claimable_
htlcs = self.claimable_htlc
s.lock().unwrap();
- let (_, htlcs) = claimable_htlcs.entry(payment_hash)
+ let mut claimable_
payments = self.claimable_payment
s.lock().unwrap();
+ let (_, htlcs) = claimable_
payments.claimable_
htlcs.entry(payment_hash)
.or_insert_with(|| (purpose(), Vec::new()));
if htlcs.len() == 1 {
if let OnionPayload::Spontaneous(_) = htlcs[0].onion_payload {
.or_insert_with(|| (purpose(), Vec::new()));
if htlcs.len() == 1 {
if let OnionPayload::Spontaneous(_) = htlcs[0].onion_payload {
@@
-3556,7
+3563,7
@@
impl<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelManager<M, T, K, F
check_total_value!(payment_data, payment_preimage);
},
OnionPayload::Spontaneous(preimage) => {
check_total_value!(payment_data, payment_preimage);
},
OnionPayload::Spontaneous(preimage) => {
- match self.claimable_
htlcs.lock().unwrap()
.entry(payment_hash) {
+ match self.claimable_
payments.lock().unwrap().claimable_htlcs
.entry(payment_hash) {
hash_map::Entry::Vacant(e) => {
let purpose = events::PaymentPurpose::SpontaneousPayment(preimage);
e.insert((purpose.clone(), vec![claimable_htlc]));
hash_map::Entry::Vacant(e) => {
let purpose = events::PaymentPurpose::SpontaneousPayment(preimage);
e.insert((purpose.clone(), vec![claimable_htlc]));
@@
-3851,7
+3858,7
@@
impl<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelManager<M, T, K, F
});
}
});
}
- self.claimable_
htlcs.lock().unwrap()
.retain(|payment_hash, (_, htlcs)| {
+ self.claimable_
payments.lock().unwrap().claimable_htlcs
.retain(|payment_hash, (_, htlcs)| {
if htlcs.is_empty() {
// This should be unreachable
debug_assert!(false);
if htlcs.is_empty() {
// This should be unreachable
debug_assert!(false);
@@
-3906,7
+3913,7
@@
impl<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelManager<M, T, K, F
pub fn fail_htlc_backwards(&self, payment_hash: &PaymentHash) {
let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(&self.total_consistency_lock, &self.persistence_notifier);
pub fn fail_htlc_backwards(&self, payment_hash: &PaymentHash) {
let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(&self.total_consistency_lock, &self.persistence_notifier);
- let removed_source = self.claimable_
htlcs.lock().unwrap()
.remove(payment_hash);
+ let removed_source = self.claimable_
payments.lock().unwrap().claimable_htlcs
.remove(payment_hash);
if let Some((_, mut sources)) = removed_source {
for htlc in sources.drain(..) {
let mut htlc_msat_height_data = htlc.value.to_be_bytes().to_vec();
if let Some((_, mut sources)) = removed_source {
for htlc in sources.drain(..) {
let mut htlc_msat_height_data = htlc.value.to_be_bytes().to_vec();
@@
-4208,7
+4215,7
@@
impl<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelManager<M, T, K, F
let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(&self.total_consistency_lock, &self.persistence_notifier);
let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(&self.total_consistency_lock, &self.persistence_notifier);
- let removed_source = self.claimable_
htlcs.lock().unwrap()
.remove(&payment_hash);
+ let removed_source = self.claimable_
payments.lock().unwrap().claimable_htlcs
.remove(&payment_hash);
if let Some((payment_purpose, mut sources)) = removed_source {
assert!(!sources.is_empty());
if let Some((payment_purpose, mut sources)) = removed_source {
assert!(!sources.is_empty());
@@
-6280,7
+6287,7
@@
where
}
if let Some(height) = height_opt {
}
if let Some(height) = height_opt {
- self.claimable_
htlcs.lock().unwrap()
.retain(|payment_hash, (_, htlcs)| {
+ self.claimable_
payments.lock().unwrap().claimable_htlcs
.retain(|payment_hash, (_, htlcs)| {
htlcs.retain(|htlc| {
// If height is approaching the number of blocks we think it takes us to get
// our commitment transaction confirmed before the HTLC expires, plus the
htlcs.retain(|htlc| {
// If height is approaching the number of blocks we think it takes us to get
// our commitment transaction confirmed before the HTLC expires, plus the
@@
-7145,12
+7152,12
@@
impl<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> Writeable for ChannelMana
}
let pending_inbound_payments = self.pending_inbound_payments.lock().unwrap();
}
let pending_inbound_payments = self.pending_inbound_payments.lock().unwrap();
- let claimable_
htlcs = self.claimable_htlc
s.lock().unwrap();
+ let claimable_
payments = self.claimable_payment
s.lock().unwrap();
let pending_outbound_payments = self.pending_outbound_payments.lock().unwrap();
let mut htlc_purposes: Vec<&events::PaymentPurpose> = Vec::new();
let pending_outbound_payments = self.pending_outbound_payments.lock().unwrap();
let mut htlc_purposes: Vec<&events::PaymentPurpose> = Vec::new();
- (claimable_htlcs.len() as u64).write(writer)?;
- for (payment_hash, (purpose, previous_hops)) in claimable_htlcs.iter() {
+ (claimable_
payments.claimable_
htlcs.len() as u64).write(writer)?;
+ for (payment_hash, (purpose, previous_hops)) in claimable_
payments.claimable_
htlcs.iter() {
payment_hash.write(writer)?;
(previous_hops.len() as u64).write(writer)?;
for htlc in previous_hops.iter() {
payment_hash.write(writer)?;
(previous_hops.len() as u64).write(writer)?;
for htlc in previous_hops.iter() {
@@
-7827,7
+7834,7
@@
impl<'a, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref>
pending_intercepted_htlcs: Mutex::new(pending_intercepted_htlcs.unwrap()),
forward_htlcs: Mutex::new(forward_htlcs),
pending_intercepted_htlcs: Mutex::new(pending_intercepted_htlcs.unwrap()),
forward_htlcs: Mutex::new(forward_htlcs),
- claimable_
htlcs: Mutex::new(claimable_htlcs
),
+ claimable_
payments: Mutex::new(ClaimablePayments { claimable_htlcs }
),
outbound_scid_aliases: Mutex::new(outbound_scid_aliases),
id_to_peer: Mutex::new(id_to_peer),
short_to_chan_info: FairRwLock::new(short_to_chan_info),
outbound_scid_aliases: Mutex::new(outbound_scid_aliases),
id_to_peer: Mutex::new(id_to_peer),
short_to_chan_info: FairRwLock::new(short_to_chan_info),