@@ -548,12 +548,14 @@ impl OutboundPayments {
548
548
outbounds. retain ( |pmt_id, pmt| {
549
549
let mut retain = true ;
550
550
if !pmt. is_auto_retryable_now ( ) && pmt. remaining_parts ( ) == 0 {
551
- let reason = PaymentFailureReason :: RetriesExhausted ;
552
- if pmt. mark_abandoned ( reason) . is_ok ( ) {
551
+ if !pmt. abandoned ( ) {
552
+ let _ = pmt. mark_abandoned ( PaymentFailureReason :: RetriesExhausted ) ;
553
+ }
554
+ if let PendingOutboundPayment :: Abandoned { payment_hash, reason, .. } = pmt {
553
555
pending_events. lock ( ) . unwrap ( ) . push ( events:: Event :: PaymentFailed {
554
556
payment_id : * pmt_id,
555
- payment_hash : pmt . payment_hash ( ) . expect ( "PendingOutboundPayments::Retryable always has a payment hash set" ) ,
556
- reason : Some ( reason) ,
557
+ payment_hash : * payment_hash,
558
+ reason : * reason,
557
559
} ) ;
558
560
retain = false ;
559
561
}
@@ -666,13 +668,18 @@ impl OutboundPayments {
666
668
667
669
macro_rules! abandon_with_entry {
668
670
( $payment: expr, $reason: expr) => {
669
- if $payment. get_mut( ) . mark_abandoned( $reason) . is_ok( ) && $payment. get( ) . remaining_parts( ) == 0 {
670
- pending_events. lock( ) . unwrap( ) . push( events:: Event :: PaymentFailed {
671
- payment_id,
672
- payment_hash,
673
- reason: Some ( $reason) ,
674
- } ) ;
675
- $payment. remove( ) ;
671
+ if !$payment. get( ) . abandoned( ) {
672
+ let _ = $payment. get_mut( ) . mark_abandoned( $reason) ;
673
+ }
674
+ if let PendingOutboundPayment :: Abandoned { reason, .. } = $payment. get( ) {
675
+ if $payment. get( ) . remaining_parts( ) == 0 {
676
+ pending_events. lock( ) . unwrap( ) . push( events:: Event :: PaymentFailed {
677
+ payment_id,
678
+ payment_hash,
679
+ reason: * reason,
680
+ } ) ;
681
+ $payment. remove( ) ;
682
+ }
676
683
}
677
684
}
678
685
}
@@ -1182,16 +1189,12 @@ impl OutboundPayments {
1182
1189
is_retryable_now = false ;
1183
1190
}
1184
1191
if payment. get ( ) . remaining_parts ( ) == 0 {
1185
- if payment. get ( ) . abandoned ( ) {
1192
+ if let PendingOutboundPayment :: Abandoned { payment_hash , reason , .. } = payment. get ( ) {
1186
1193
if !payment_is_probe {
1187
1194
full_failure_ev = Some ( events:: Event :: PaymentFailed {
1188
1195
payment_id : * payment_id,
1189
- payment_hash : payment. get ( ) . payment_hash ( ) . expect ( "PendingOutboundPayments::RetriesExceeded always has a payment hash set" ) ,
1190
- reason : Some ( if payment_retryable {
1191
- PaymentFailureReason :: RetriesExhausted
1192
- } else {
1193
- PaymentFailureReason :: RecipientRejected
1194
- } ) ,
1196
+ payment_hash : * payment_hash,
1197
+ reason : * reason,
1195
1198
} ) ;
1196
1199
}
1197
1200
payment. remove ( ) ;
@@ -1253,12 +1256,15 @@ impl OutboundPayments {
1253
1256
) {
1254
1257
let mut outbounds = self . pending_outbound_payments . lock ( ) . unwrap ( ) ;
1255
1258
if let hash_map:: Entry :: Occupied ( mut payment) = outbounds. entry ( payment_id) {
1256
- if let Ok ( ( ) ) = payment. get_mut ( ) . mark_abandoned ( reason) {
1259
+ if !payment. get ( ) . abandoned ( ) {
1260
+ let _ = payment. get_mut ( ) . mark_abandoned ( reason) ;
1261
+ }
1262
+ if let PendingOutboundPayment :: Abandoned { payment_hash, reason, .. } = payment. get ( ) {
1257
1263
if payment. get ( ) . remaining_parts ( ) == 0 {
1258
1264
pending_events. lock ( ) . unwrap ( ) . push ( events:: Event :: PaymentFailed {
1259
1265
payment_id,
1260
- payment_hash : payment . get ( ) . payment_hash ( ) . expect ( "PendingOutboundPayments::RetriesExceeded always has a payment hash set" ) ,
1261
- reason : Some ( reason) ,
1266
+ payment_hash : * payment_hash,
1267
+ reason : * reason,
1262
1268
} ) ;
1263
1269
payment. remove ( ) ;
1264
1270
}
0 commit comments