Skip to content

Commit 3f36c0e

Browse files
When processing pending htlcs, abandon outbounds that are not retryable
1 parent fd0f982 commit 3f36c0e

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

lightning/src/ln/outbound_payment.rs

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

540558
/// Errors with no attempt at payment if the route parameters have expired, we failed to find a

lightning/src/ln/payment_tests.rs

-2
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)