Skip to content

Commit eac2e69

Browse files
Don't remove AllPathsFailed outbounds if they're retryable
This makes it easier to retry payments if all paths fail on initial send.
1 parent 044793a commit eac2e69

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

lightning/src/ln/outbound_payment.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -641,8 +641,14 @@ impl OutboundPayments {
641641
} else if has_err {
642642
// If we failed to send any paths, we should remove the new PaymentId from the
643643
// `pending_outbound_payments` map, as the user isn't expected to `abandon_payment`.
644-
let removed = self.pending_outbound_payments.lock().unwrap().remove(&payment_id).is_some();
645-
debug_assert!(removed, "We should always have a pending payment to remove here");
644+
if !self.pending_outbound_payments.lock().unwrap().get(&payment_id)
645+
.map_or(false, |payment| payment.is_retryable())
646+
{
647+
// If we failed to send any paths, we should remove the new PaymentId from the
648+
// `pending_outbound_payments` map, as the user isn't expected to `abandon_payment`.
649+
let removed = self.pending_outbound_payments.lock().unwrap().remove(&payment_id).is_some();
650+
debug_assert!(removed, "We should always have a pending payment to remove here");
651+
}
646652
Err(PaymentSendFailure::AllFailedResendSafe(results.drain(..).map(|r| r.unwrap_err()).collect()))
647653
} else {
648654
Ok(())

0 commit comments

Comments
 (0)