Skip to content

Commit 4d547ed

Browse files
f append to pending_events in outbound_payment
and get rid of an unnecessary mut
1 parent 83330ae commit 4d547ed

File tree

2 files changed

+26
-34
lines changed

2 files changed

+26
-34
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 & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -561,24 +561,24 @@ impl OutboundPayments {
561561

562562
pub(super) fn claim_htlc<L: Deref>(
563563
&self, payment_id: PaymentId, payment_preimage: PaymentPreimage, session_priv: SecretKey,
564-
path: Vec<RouteHop>, from_onchain: bool, logger: &L)
565-
-> (Option<events::Event>, Option<events::Event>) where L::Target: Logger {
566-
let mut payment_sent_ev = None;
567-
let mut path_success_ev = None;
564+
path: Vec<RouteHop>, from_onchain: bool, pending_events: &Mutex<Vec<events::Event>>, logger: &L)
565+
where L::Target: Logger {
568566
let mut session_priv_bytes = [0; 32];
569567
session_priv_bytes.copy_from_slice(&session_priv[..]);
570568
let mut outbounds = self.pending_outbound_payments.lock().unwrap();
569+
let mut pending_events = pending_events.lock().unwrap();
571570
if let hash_map::Entry::Occupied(mut payment) = outbounds.entry(payment_id) {
572571
if !payment.get().is_fulfilled() {
573572
let payment_hash = PaymentHash(Sha256::hash(&payment_preimage.0).into_inner());
574573
let fee_paid_msat = payment.get().get_pending_fee_msat();
575-
payment_sent_ev =
576-
Some(events::Event::PaymentSent {
574+
pending_events.push(
575+
events::Event::PaymentSent {
577576
payment_id: Some(payment_id),
578577
payment_preimage,
579578
payment_hash,
580579
fee_paid_msat,
581-
});
580+
}
581+
);
582582
payment.get_mut().mark_fulfilled();
583583
}
584584

@@ -591,31 +591,31 @@ impl OutboundPayments {
591591
// irrevocably fulfilled.
592592
if payment.get_mut().remove(&session_priv_bytes, Some(&path)) {
593593
let payment_hash = Some(PaymentHash(Sha256::hash(&payment_preimage.0).into_inner()));
594-
path_success_ev =
595-
Some(events::Event::PaymentPathSuccessful {
594+
pending_events.push(
595+
events::Event::PaymentPathSuccessful {
596596
payment_id,
597597
payment_hash,
598598
path,
599-
});
599+
}
600+
);
600601
}
601602
}
602603
} else {
603604
log_trace!(logger, "Received duplicative fulfill for HTLC with payment_preimage {}", log_bytes!(payment_preimage.0));
604605
}
605-
(payment_sent_ev, path_success_ev)
606606
}
607607

608-
pub(super) fn finalize_claims(&self, mut sources: Vec<HTLCSource>) -> Vec<events::Event> {
608+
pub(super) fn finalize_claims(&self, sources: Vec<HTLCSource>, pending_events: &Mutex<Vec<events::Event>>) {
609609
let mut outbounds = self.pending_outbound_payments.lock().unwrap();
610-
let mut success_events = Vec::new();
611-
for source in sources.drain(..) {
610+
let mut pending_events = pending_events.lock().unwrap();
611+
for source in sources {
612612
if let HTLCSource::OutboundRoute { session_priv, payment_id, path, .. } = source {
613613
let mut session_priv_bytes = [0; 32];
614614
session_priv_bytes.copy_from_slice(&session_priv[..]);
615615
if let hash_map::Entry::Occupied(mut payment) = outbounds.entry(payment_id) {
616616
assert!(payment.get().is_fulfilled());
617617
if payment.get_mut().remove(&session_priv_bytes, None) {
618-
success_events.push(
618+
pending_events.push(
619619
events::Event::PaymentPathSuccessful {
620620
payment_id,
621621
payment_hash: payment.get().payment_hash(),
@@ -626,7 +626,6 @@ impl OutboundPayments {
626626
}
627627
}
628628
}
629-
success_events
630629
}
631630

632631
pub(super) fn remove_stale_resolved_payments(&self, pending_events: &Mutex<Vec<events::Event>>) {
@@ -672,8 +671,8 @@ impl OutboundPayments {
672671
&self, source: &HTLCSource, payment_hash: &PaymentHash, onion_error: &HTLCFailReason,
673672
path: &Vec<RouteHop>, session_priv: &SecretKey, payment_id: &PaymentId,
674673
payment_params: &Option<PaymentParameters>, probing_cookie_secret: [u8; 32],
675-
secp_ctx: &Secp256k1<secp256k1::All>, logger: &L)
676-
-> (Option<events::Event>, Option<events::Event>) where L::Target: Logger {
674+
secp_ctx: &Secp256k1<secp256k1::All>, pending_events: &Mutex<Vec<events::Event>>, logger: &L)
675+
where L::Target: Logger {
677676
let mut session_priv_bytes = [0; 32];
678677
session_priv_bytes.copy_from_slice(&session_priv[..]);
679678
let mut outbounds = self.pending_outbound_payments.lock().unwrap();
@@ -682,11 +681,11 @@ impl OutboundPayments {
682681
if let hash_map::Entry::Occupied(mut payment) = outbounds.entry(*payment_id) {
683682
if !payment.get_mut().remove(&session_priv_bytes, Some(&path)) {
684683
log_trace!(logger, "Received duplicative fail for HTLC with payment_hash {}", log_bytes!(payment_hash.0));
685-
return (None, None);
684+
return
686685
}
687686
if payment.get().is_fulfilled() {
688687
log_trace!(logger, "Received failure of HTLC with payment_hash {} after payment completion", log_bytes!(payment_hash.0));
689-
return (None, None);
688+
return
690689
}
691690
if payment.get().remaining_parts() == 0 {
692691
all_paths_failed = true;
@@ -700,7 +699,7 @@ impl OutboundPayments {
700699
}
701700
} else {
702701
log_trace!(logger, "Received duplicative fail for HTLC with payment_hash {}", log_bytes!(payment_hash.0));
703-
return (None, None);
702+
return
704703
}
705704
let mut retry = if let Some(payment_params_data) = payment_params {
706705
let path_last_hop = path.last().expect("Outbound payments must have had a valid path");
@@ -756,7 +755,9 @@ impl OutboundPayments {
756755
}
757756
}
758757
};
759-
(Some(path_failure), full_failure_ev)
758+
let mut pending_events = pending_events.lock().unwrap();
759+
pending_events.push(path_failure);
760+
if let Some(ev) = full_failure_ev { pending_events.push(ev); }
760761
}
761762

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

0 commit comments

Comments
 (0)