Skip to content

Commit b9815db

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 dbbe8fe commit b9815db

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
@@ -643,8 +643,14 @@ impl OutboundPayments {
643643
} else if has_err {
644644
// If we failed to send any paths, we should remove the new PaymentId from the
645645
// `pending_outbound_payments` map, as the user isn't expected to `abandon_payment`.
646-
let removed = self.pending_outbound_payments.lock().unwrap().remove(&payment_id).is_some();
647-
debug_assert!(removed, "We should always have a pending payment to remove here");
646+
if !self.pending_outbound_payments.lock().unwrap().get(&payment_id)
647+
.map_or(false, |payment| payment.is_retryable())
648+
{
649+
// If we failed to send any paths, we should remove the new PaymentId from the
650+
// `pending_outbound_payments` map, as the user isn't expected to `abandon_payment`.
651+
let removed = self.pending_outbound_payments.lock().unwrap().remove(&payment_id).is_some();
652+
debug_assert!(removed, "We should always have a pending payment to remove here");
653+
}
648654
Err(PaymentSendFailure::AllFailedResendSafe(results.drain(..).map(|r| r.unwrap_err()).collect()))
649655
} else {
650656
Ok(())

0 commit comments

Comments
 (0)