Skip to content

Commit 5168559

Browse files
f append to pending_events in outbound_payment
1 parent ef0d230 commit 5168559

File tree

2 files changed

+26
-33
lines changed

2 files changed

+26
-33
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3478,10 +3478,7 @@ impl<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelManager<M, T, K, F
34783478
// being fully configured. See the docs for `ChannelManagerReadArgs` for more.
34793479
match source {
34803480
HTLCSource::OutboundRoute { ref path, ref session_priv, ref payment_id, ref payment_params, .. } => {
3481-
let (path_failure, full_failure_ev) = self.pending_outbound_payments.fail_htlc(source, payment_hash, onion_error, path, session_priv, payment_id, payment_params, self.probing_cookie_secret, &self.secp_ctx, &self.logger);
3482-
let mut pending_events = self.pending_events.lock().unwrap();
3483-
if let Some(ev) = path_failure { pending_events.push(ev); }
3484-
if let Some(ev) = full_failure_ev { pending_events.push(ev); }
3481+
self.pending_outbound_payments.fail_htlc(source, payment_hash, onion_error, path, session_priv, payment_id, payment_params, self.probing_cookie_secret, &self.secp_ctx, &self.pending_events, &self.logger);
34853482
},
34863483
HTLCSource::PreviousHopData(HTLCPreviousHopData { ref short_channel_id, ref htlc_id, ref incoming_packet_shared_secret, ref phantom_shared_secret, ref outpoint }) => {
34873484
log_trace!(self.logger, "Failing HTLC with payment_hash {} backwards from us with {:?}", log_bytes!(payment_hash.0), onion_error);
@@ -3765,20 +3762,14 @@ impl<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelManager<M, T, K, F
37653762
}
37663763

37673764
fn finalize_claims(&self, sources: Vec<HTLCSource>) {
3768-
let mut path_success_evs = self.pending_outbound_payments.finalize_claims(sources);
3769-
if path_success_evs.len() == 0 { return }
3770-
let mut pending_events = self.pending_events.lock().unwrap();
3771-
pending_events.append(&mut path_success_evs);
3765+
self.pending_outbound_payments.finalize_claims(sources, &self.pending_events);
37723766
}
37733767

37743768
fn claim_funds_internal(&self, channel_state_lock: MutexGuard<ChannelHolder<<K::Target as KeysInterface>::Signer>>, source: HTLCSource, payment_preimage: PaymentPreimage, forwarded_htlc_value_msat: Option<u64>, from_onchain: bool, next_channel_id: [u8; 32]) {
37753769
match source {
37763770
HTLCSource::OutboundRoute { session_priv, payment_id, path, .. } => {
37773771
mem::drop(channel_state_lock);
3778-
let (payment_sent_ev, path_success_ev) = self.pending_outbound_payments.claim_htlc(payment_id, payment_preimage, session_priv, path, from_onchain, &self.logger);
3779-
let mut pending_events = self.pending_events.lock().unwrap();
3780-
if let Some(ev) = payment_sent_ev { pending_events.push(ev); }
3781-
if let Some(ev) = path_success_ev { pending_events.push(ev); }
3772+
self.pending_outbound_payments.claim_htlc(payment_id, payment_preimage, session_priv, path, from_onchain, &self.pending_events, &self.logger);
37823773
},
37833774
HTLCSource::PreviousHopData(hop_data) => {
37843775
let prev_outpoint = hop_data.outpoint;

lightning/src/ln/outbound_payment.rs

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -559,24 +559,24 @@ impl OutboundPayments {
559559

560560
pub(super) fn claim_htlc<L: Deref>(&self, payment_id: PaymentId,
561561
payment_preimage: PaymentPreimage, session_priv: SecretKey, path: Vec<RouteHop>,
562-
from_onchain: bool, logger: &L)
563-
-> (Option<events::Event>, Option<events::Event>) where L::Target: Logger {
564-
let mut payment_sent_ev = None;
565-
let mut path_success_ev = None;
562+
from_onchain: bool, pending_events: &Mutex<Vec<events::Event>>, logger: &L)
563+
where L::Target: Logger {
566564
let mut session_priv_bytes = [0; 32];
567565
session_priv_bytes.copy_from_slice(&session_priv[..]);
568566
let mut outbounds = self.pending_outbound_payments.lock().unwrap();
567+
let mut pending_events = pending_events.lock().unwrap();
569568
if let hash_map::Entry::Occupied(mut payment) = outbounds.entry(payment_id) {
570569
if !payment.get().is_fulfilled() {
571570
let payment_hash = PaymentHash(Sha256::hash(&payment_preimage.0).into_inner());
572571
let fee_paid_msat = payment.get().get_pending_fee_msat();
573-
payment_sent_ev =
574-
Some(events::Event::PaymentSent {
572+
pending_events.push(
573+
events::Event::PaymentSent {
575574
payment_id: Some(payment_id),
576575
payment_preimage,
577576
payment_hash,
578577
fee_paid_msat,
579-
});
578+
}
579+
);
580580
payment.get_mut().mark_fulfilled();
581581
}
582582

@@ -589,31 +589,31 @@ impl OutboundPayments {
589589
// irrevocably fulfilled.
590590
if payment.get_mut().remove(&session_priv_bytes, Some(&path)) {
591591
let payment_hash = Some(PaymentHash(Sha256::hash(&payment_preimage.0).into_inner()));
592-
path_success_ev =
593-
Some(events::Event::PaymentPathSuccessful {
592+
pending_events.push(
593+
events::Event::PaymentPathSuccessful {
594594
payment_id,
595595
payment_hash,
596596
path,
597-
});
597+
}
598+
);
598599
}
599600
}
600601
} else {
601602
log_trace!(logger, "Received duplicative fulfill for HTLC with payment_preimage {}", log_bytes!(payment_preimage.0));
602603
}
603-
(payment_sent_ev, path_success_ev)
604604
}
605605

606-
pub(super) fn finalize_claims(&self, mut sources: Vec<HTLCSource>) -> Vec<events::Event> {
606+
pub(super) fn finalize_claims(&self, mut sources: Vec<HTLCSource>, pending_events: &Mutex<Vec<events::Event>>) {
607607
let mut outbounds = self.pending_outbound_payments.lock().unwrap();
608-
let mut success_events = Vec::new();
608+
let mut pending_events = pending_events.lock().unwrap();
609609
for source in sources.drain(..) {
610610
if let HTLCSource::OutboundRoute { session_priv, payment_id, path, .. } = source {
611611
let mut session_priv_bytes = [0; 32];
612612
session_priv_bytes.copy_from_slice(&session_priv[..]);
613613
if let hash_map::Entry::Occupied(mut payment) = outbounds.entry(payment_id) {
614614
assert!(payment.get().is_fulfilled());
615615
if payment.get_mut().remove(&session_priv_bytes, None) {
616-
success_events.push(
616+
pending_events.push(
617617
events::Event::PaymentPathSuccessful {
618618
payment_id,
619619
payment_hash: payment.get().payment_hash(),
@@ -624,7 +624,6 @@ impl OutboundPayments {
624624
}
625625
}
626626
}
627-
success_events
628627
}
629628

630629
pub(super) fn remove_stale_resolved_payments(&self, pending_events: &Mutex<Vec<events::Event>>) {
@@ -669,8 +668,9 @@ impl OutboundPayments {
669668
pub(super) fn fail_htlc<L: Deref>(&self, source: &HTLCSource, payment_hash: &PaymentHash,
670669
onion_error: &HTLCFailReason, path: &Vec<RouteHop>, session_priv: &SecretKey,
671670
payment_id: &PaymentId, payment_params: &Option<PaymentParameters>,
672-
probing_cookie_secret: [u8; 32], secp_ctx: &Secp256k1<secp256k1::All>, logger: &L)
673-
-> (Option<events::Event>, Option<events::Event>) where L::Target: Logger {
671+
probing_cookie_secret: [u8; 32], secp_ctx: &Secp256k1<secp256k1::All>,
672+
pending_events: &Mutex<Vec<events::Event>>, logger: &L)
673+
where L::Target: Logger {
674674
let mut session_priv_bytes = [0; 32];
675675
session_priv_bytes.copy_from_slice(&session_priv[..]);
676676
let mut outbounds = self.pending_outbound_payments.lock().unwrap();
@@ -679,11 +679,11 @@ impl OutboundPayments {
679679
if let hash_map::Entry::Occupied(mut payment) = outbounds.entry(*payment_id) {
680680
if !payment.get_mut().remove(&session_priv_bytes, Some(&path)) {
681681
log_trace!(logger, "Received duplicative fail for HTLC with payment_hash {}", log_bytes!(payment_hash.0));
682-
return (None, None);
682+
return
683683
}
684684
if payment.get().is_fulfilled() {
685685
log_trace!(logger, "Received failure of HTLC with payment_hash {} after payment completion", log_bytes!(payment_hash.0));
686-
return (None, None);
686+
return
687687
}
688688
if payment.get().remaining_parts() == 0 {
689689
all_paths_failed = true;
@@ -697,7 +697,7 @@ impl OutboundPayments {
697697
}
698698
} else {
699699
log_trace!(logger, "Received duplicative fail for HTLC with payment_hash {}", log_bytes!(payment_hash.0));
700-
return (None, None);
700+
return
701701
}
702702
let mut retry = if let Some(payment_params_data) = payment_params {
703703
let path_last_hop = path.last().expect("Outbound payments must have had a valid path");
@@ -753,7 +753,9 @@ impl OutboundPayments {
753753
}
754754
}
755755
};
756-
(Some(path_failure), full_failure_ev)
756+
let mut pending_events = pending_events.lock().unwrap();
757+
pending_events.push(path_failure);
758+
if let Some(ev) = full_failure_ev { pending_events.push(ev); }
757759
}
758760

759761
pub(super) fn abandon_payment(&self, payment_id: PaymentId) -> Option<events::Event> {

0 commit comments

Comments
 (0)