Skip to content

Commit 67b0770

Browse files
committed
Add awaiting_invoice_flag to track PendingOutboundPayments state
- Introduce awaiting_invoice_flag to indicate if any PendingOutboundPayments are in the AwaitingInvoice state. - This flag helps determine the state of pending_outbound_payment without explicitly locking its mutex.
1 parent 1d0c6c6 commit 67b0770

File tree

2 files changed

+10
-0
lines changed

2 files changed

+10
-0
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8517,6 +8517,8 @@ where
85178517
return Err(Bolt12SemanticError::MissingSigningPubkey);
85188518
}
85198519

8520+
self.pending_outbound_payments.awaiting_invoice_flag.store(true, Ordering::SeqCst);
8521+
85208522
Ok(())
85218523
}
85228524

@@ -10787,6 +10789,7 @@ where
1078710789
let pending_inbound_payments = self.pending_inbound_payments.lock().unwrap();
1078810790
let claimable_payments = self.claimable_payments.lock().unwrap();
1078910791
let pending_outbound_payments = self.pending_outbound_payments.pending_outbound_payments.lock().unwrap();
10792+
let awaiting_invoice_flag_opt = Some(self.pending_outbound_payments.awaiting_invoice_flag.load(Ordering::SeqCst));
1079010793

1079110794
let mut htlc_purposes: Vec<&events::PaymentPurpose> = Vec::new();
1079210795
let mut htlc_onion_fields: Vec<&_> = Vec::new();
@@ -10934,6 +10937,7 @@ where
1093410937
(11, self.probing_cookie_secret, required),
1093510938
(13, htlc_onion_fields, optional_vec),
1093610939
(14, decode_update_add_htlcs_opt, option),
10940+
(15, awaiting_invoice_flag_opt, option),
1093710941
});
1093810942

1093910943
Ok(())
@@ -11383,6 +11387,7 @@ where
1138311387
// pending_outbound_payments_no_retry is for compatibility with 0.0.101 clients.
1138411388
let mut pending_outbound_payments_no_retry: Option<HashMap<PaymentId, HashSet<[u8; 32]>>> = None;
1138511389
let mut pending_outbound_payments = None;
11390+
let mut awaiting_invoice_flag = None;
1138611391
let mut pending_intercepted_htlcs: Option<HashMap<InterceptId, PendingAddHTLCInfo>> = Some(new_hash_map());
1138711392
let mut received_network_pubkey: Option<PublicKey> = None;
1138811393
let mut fake_scid_rand_bytes: Option<[u8; 32]> = None;
@@ -11408,6 +11413,7 @@ where
1140811413
(11, probing_cookie_secret, option),
1140911414
(13, claimable_htlc_onion_fields, optional_vec),
1141011415
(14, decode_update_add_htlcs, option),
11416+
(15, awaiting_invoice_flag, option),
1141111417
});
1141211418
let mut decode_update_add_htlcs = decode_update_add_htlcs.unwrap_or_else(|| new_hash_map());
1141311419
if fake_scid_rand_bytes.is_none() {
@@ -11437,6 +11443,7 @@ where
1143711443
}
1143811444
let pending_outbounds = OutboundPayments {
1143911445
pending_outbound_payments: Mutex::new(pending_outbound_payments.unwrap()),
11446+
awaiting_invoice_flag: AtomicBool::new(awaiting_invoice_flag.unwrap_or(false)),
1144011447
retry_lock: Mutex::new(())
1144111448
};
1144211449

lightning/src/ln/outbound_payment.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ use crate::util::ser::ReadableArgs;
3131

3232
use core::fmt::{self, Display, Formatter};
3333
use core::ops::Deref;
34+
use core::sync::atomic::{AtomicBool, Ordering};
3435
use core::time::Duration;
3536

3637
use crate::prelude::*;
@@ -677,13 +678,15 @@ pub(super) struct SendAlongPathArgs<'a> {
677678

678679
pub(super) struct OutboundPayments {
679680
pub(super) pending_outbound_payments: Mutex<HashMap<PaymentId, PendingOutboundPayment>>,
681+
pub(super) awaiting_invoice_flag: AtomicBool,
680682
pub(super) retry_lock: Mutex<()>,
681683
}
682684

683685
impl OutboundPayments {
684686
pub(super) fn new() -> Self {
685687
Self {
686688
pending_outbound_payments: Mutex::new(new_hash_map()),
689+
awaiting_invoice_flag: AtomicBool::new(false),
687690
retry_lock: Mutex::new(()),
688691
}
689692
}

0 commit comments

Comments
 (0)