Skip to content

Commit 94b51fd

Browse files
When processing pending htlcs, abandon outbounds that are not retryable
1 parent c09fbbc commit 94b51fd

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

lightning/src/ln/outbound_payment.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -534,6 +534,24 @@ impl OutboundPayments {
534534
}
535535
} else { break }
536536
}
537+
538+
let mut outbounds = self.pending_outbound_payments.lock().unwrap();
539+
outbounds.retain(|pmt_id, pmt| {
540+
let mut retain = true;
541+
let auto_retryable = pmt.is_auto_retryable_now();
542+
if let PendingOutboundPayment::Retryable { pending_amt_msat, total_msat, .. } = pmt {
543+
if pending_amt_msat < total_msat {
544+
if !auto_retryable && pmt.mark_abandoned().is_ok() && pmt.remaining_parts() == 0 {
545+
pending_events.lock().unwrap().push(events::Event::PaymentFailed {
546+
payment_id: *pmt_id,
547+
payment_hash: pmt.payment_hash().expect("PendingOutboundPayments::Retryable always has a payment hash set"),
548+
});
549+
retain = false;
550+
}
551+
}
552+
}
553+
retain
554+
});
537555
}
538556

539557
fn pay_internal<R: Deref, NS: Deref, ES: Deref, F, L: Deref>(

lightning/src/ln/payment_tests.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1682,7 +1682,6 @@ fn do_automatic_retries(test: AutoRetry) {
16821682
let mut msg_events = nodes[0].node.get_and_clear_pending_msg_events();
16831683
assert_eq!(msg_events.len(), 0);
16841684

1685-
nodes[0].node.abandon_payment(PaymentId(payment_hash.0));
16861685
let mut events = nodes[0].node.get_and_clear_pending_events();
16871686
assert_eq!(events.len(), 1);
16881687
match events[0] {
@@ -1717,7 +1716,6 @@ fn do_automatic_retries(test: AutoRetry) {
17171716
let mut msg_events = nodes[0].node.get_and_clear_pending_msg_events();
17181717
assert_eq!(msg_events.len(), 0);
17191718

1720-
nodes[0].node.abandon_payment(PaymentId(payment_hash.0));
17211719
let mut events = nodes[0].node.get_and_clear_pending_events();
17221720
assert_eq!(events.len(), 1);
17231721
match events[0] {

0 commit comments

Comments
 (0)