Skip to content

Commit d3827fe

Browse files
When processing pending htlcs, abandon outbounds that are not retryable
1 parent 553ad8c commit d3827fe

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
@@ -536,6 +536,24 @@ impl OutboundPayments {
536536
}
537537
} else { break }
538538
}
539+
540+
let mut outbounds = self.pending_outbound_payments.lock().unwrap();
541+
outbounds.retain(|pmt_id, pmt| {
542+
let mut retain = true;
543+
let auto_retryable = pmt.is_auto_retryable_now();
544+
if let PendingOutboundPayment::Retryable { pending_amt_msat, total_msat, .. } = pmt {
545+
if pending_amt_msat < total_msat {
546+
if !auto_retryable && pmt.mark_abandoned().is_ok() && pmt.remaining_parts() == 0 {
547+
pending_events.lock().unwrap().push(events::Event::PaymentFailed {
548+
payment_id: *pmt_id,
549+
payment_hash: pmt.payment_hash().expect("PendingOutboundPayments::Retryable always has a payment hash set"),
550+
});
551+
retain = false;
552+
}
553+
}
554+
}
555+
retain
556+
});
539557
}
540558

541559
fn pay_internal<R: Deref, NS: Deref, ES: Deref, IH, SP, L: Deref>(

lightning/src/ln/payment_tests.rs

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

1736-
nodes[0].node.abandon_payment(PaymentId(payment_hash.0));
17371736
let mut events = nodes[0].node.get_and_clear_pending_events();
17381737
assert_eq!(events.len(), 1);
17391738
match events[0] {
@@ -1768,7 +1767,6 @@ fn do_automatic_retries(test: AutoRetry) {
17681767
let mut msg_events = nodes[0].node.get_and_clear_pending_msg_events();
17691768
assert_eq!(msg_events.len(), 0);
17701769

1771-
nodes[0].node.abandon_payment(PaymentId(payment_hash.0));
17721770
let mut events = nodes[0].node.get_and_clear_pending_events();
17731771
assert_eq!(events.len(), 1);
17741772
match events[0] {

0 commit comments

Comments
 (0)