@@ -215,11 +215,19 @@ impl PendingOutboundPayment {
215215 PendingOutboundPayment :: InvoiceReceived { .. } => { debug_assert ! ( false ) ; false } ,
216216 } ;
217217 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" ) ;
220223 * pending_amt_msat -= path. final_value_msat ( ) ;
224+ let path_fee_msat = path. fee_msat ( ) ;
221225 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) ;
223231 }
224232 }
225233 }
@@ -238,11 +246,19 @@ impl PendingOutboundPayment {
238246 PendingOutboundPayment :: Abandoned { .. } => false ,
239247 } ;
240248 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+ }
246262 }
247263 }
248264 insert_res
@@ -1573,7 +1589,7 @@ impl OutboundPayments {
15731589 is_retryable_now = false ;
15741590 }
15751591 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 ( ) {
15771593 if !payment_is_probe {
15781594 full_failure_ev = Some ( events:: Event :: PaymentFailed {
15791595 payment_id : * payment_id,
0 commit comments