@@ -215,11 +215,19 @@ impl PendingOutboundPayment {
215
215
PendingOutboundPayment :: InvoiceReceived { .. } => { debug_assert ! ( false ) ; false } ,
216
216
} ;
217
217
if remove_res {
218
- if let PendingOutboundPayment :: Retryable { ref mut pending_amt_msat, ref mut pending_fee_msat, .. } = self {
219
- let path = path. expect ( "Fulfilling a payment should always come with a path" ) ;
218
+ if let PendingOutboundPayment :: Retryable {
219
+ ref mut pending_amt_msat, ref mut pending_fee_msat,
220
+ ref mut remaining_max_total_routing_fee_msat, ..
221
+ } = self {
222
+ let path = path. expect ( "Removing a failed payment should always come with a path" ) ;
220
223
* pending_amt_msat -= path. final_value_msat ( ) ;
224
+ let path_fee_msat = path. fee_msat ( ) ;
221
225
if let Some ( fee_msat) = pending_fee_msat. as_mut ( ) {
222
- * fee_msat -= path. fee_msat ( ) ;
226
+ * fee_msat -= path_fee_msat;
227
+ }
228
+
229
+ if let Some ( max_total_routing_fee_msat) = remaining_max_total_routing_fee_msat. as_mut ( ) {
230
+ * max_total_routing_fee_msat = max_total_routing_fee_msat. saturating_add ( path_fee_msat) ;
223
231
}
224
232
}
225
233
}
@@ -238,11 +246,19 @@ impl PendingOutboundPayment {
238
246
PendingOutboundPayment :: Abandoned { .. } => false ,
239
247
} ;
240
248
if insert_res {
241
- if let PendingOutboundPayment :: Retryable { ref mut pending_amt_msat, ref mut pending_fee_msat, .. } = self {
242
- * pending_amt_msat += path. final_value_msat ( ) ;
243
- if let Some ( fee_msat) = pending_fee_msat. as_mut ( ) {
244
- * fee_msat += path. fee_msat ( ) ;
245
- }
249
+ if let PendingOutboundPayment :: Retryable {
250
+ ref mut pending_amt_msat, ref mut pending_fee_msat,
251
+ ref mut remaining_max_total_routing_fee_msat, ..
252
+ } = self {
253
+ * pending_amt_msat += path. final_value_msat ( ) ;
254
+ let path_fee_msat = path. fee_msat ( ) ;
255
+ if let Some ( fee_msat) = pending_fee_msat. as_mut ( ) {
256
+ * fee_msat += path_fee_msat;
257
+ }
258
+
259
+ if let Some ( max_total_routing_fee_msat) = remaining_max_total_routing_fee_msat. as_mut ( ) {
260
+ * max_total_routing_fee_msat = max_total_routing_fee_msat. saturating_sub ( path_fee_msat) ;
261
+ }
246
262
}
247
263
}
248
264
insert_res
@@ -1573,7 +1589,7 @@ impl OutboundPayments {
1573
1589
is_retryable_now = false ;
1574
1590
}
1575
1591
if payment. get ( ) . remaining_parts ( ) == 0 {
1576
- if let PendingOutboundPayment :: Abandoned { payment_hash, reason, .. } = payment. get ( ) {
1592
+ if let PendingOutboundPayment :: Abandoned { payment_hash, reason, .. } = payment. get ( ) {
1577
1593
if !payment_is_probe {
1578
1594
full_failure_ev = Some ( events:: Event :: PaymentFailed {
1579
1595
payment_id : * payment_id,
0 commit comments