Skip to content

Commit caf991b

Browse files
committed
f - pull from state when pushing PaymentFailed
1 parent afe7481 commit caf991b

File tree

1 file changed

+27
-21
lines changed

1 file changed

+27
-21
lines changed

lightning/src/ln/outbound_payment.rs

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -548,12 +548,14 @@ impl OutboundPayments {
548548
outbounds.retain(|pmt_id, pmt| {
549549
let mut retain = true;
550550
if !pmt.is_auto_retryable_now() && pmt.remaining_parts() == 0 {
551-
let reason = PaymentFailureReason::RetriesExhausted;
552-
if pmt.mark_abandoned(reason).is_ok() {
551+
if !pmt.abandoned() {
552+
let _ = pmt.mark_abandoned(PaymentFailureReason::RetriesExhausted);
553+
}
554+
if let PendingOutboundPayment::Abandoned { payment_hash, reason, .. } = pmt {
553555
pending_events.lock().unwrap().push(events::Event::PaymentFailed {
554556
payment_id: *pmt_id,
555-
payment_hash: pmt.payment_hash().expect("PendingOutboundPayments::Retryable always has a payment hash set"),
556-
reason: Some(reason),
557+
payment_hash: *payment_hash,
558+
reason: *reason,
557559
});
558560
retain = false;
559561
}
@@ -666,13 +668,18 @@ impl OutboundPayments {
666668

667669
macro_rules! abandon_with_entry {
668670
($payment: expr, $reason: expr) => {
669-
if $payment.get_mut().mark_abandoned($reason).is_ok() && $payment.get().remaining_parts() == 0 {
670-
pending_events.lock().unwrap().push(events::Event::PaymentFailed {
671-
payment_id,
672-
payment_hash,
673-
reason: Some($reason),
674-
});
675-
$payment.remove();
671+
if !$payment.get().abandoned() {
672+
let _ = $payment.get_mut().mark_abandoned($reason);
673+
}
674+
if let PendingOutboundPayment::Abandoned { reason, .. } = $payment.get() {
675+
if $payment.get().remaining_parts() == 0 {
676+
pending_events.lock().unwrap().push(events::Event::PaymentFailed {
677+
payment_id,
678+
payment_hash,
679+
reason: *reason,
680+
});
681+
$payment.remove();
682+
}
676683
}
677684
}
678685
}
@@ -1182,16 +1189,12 @@ impl OutboundPayments {
11821189
is_retryable_now = false;
11831190
}
11841191
if payment.get().remaining_parts() == 0 {
1185-
if payment.get().abandoned() {
1192+
if let PendingOutboundPayment::Abandoned { payment_hash, reason, .. }= payment.get() {
11861193
if !payment_is_probe {
11871194
full_failure_ev = Some(events::Event::PaymentFailed {
11881195
payment_id: *payment_id,
1189-
payment_hash: payment.get().payment_hash().expect("PendingOutboundPayments::RetriesExceeded always has a payment hash set"),
1190-
reason: Some(if payment_retryable {
1191-
PaymentFailureReason::RetriesExhausted
1192-
} else {
1193-
PaymentFailureReason::RecipientRejected
1194-
}),
1196+
payment_hash: *payment_hash,
1197+
reason: *reason,
11951198
});
11961199
}
11971200
payment.remove();
@@ -1253,12 +1256,15 @@ impl OutboundPayments {
12531256
) {
12541257
let mut outbounds = self.pending_outbound_payments.lock().unwrap();
12551258
if let hash_map::Entry::Occupied(mut payment) = outbounds.entry(payment_id) {
1256-
if let Ok(()) = payment.get_mut().mark_abandoned(reason) {
1259+
if !payment.get().abandoned() {
1260+
let _ = payment.get_mut().mark_abandoned(reason);
1261+
}
1262+
if let PendingOutboundPayment::Abandoned { payment_hash, reason, .. } = payment.get() {
12571263
if payment.get().remaining_parts() == 0 {
12581264
pending_events.lock().unwrap().push(events::Event::PaymentFailed {
12591265
payment_id,
1260-
payment_hash: payment.get().payment_hash().expect("PendingOutboundPayments::RetriesExceeded always has a payment hash set"),
1261-
reason: Some(reason),
1266+
payment_hash: *payment_hash,
1267+
reason: *reason,
12621268
});
12631269
payment.remove();
12641270
}

0 commit comments

Comments
 (0)