Skip to content

Commit a2b956d

Browse files
Remove pending probes on update_fail
Previously we had a memory leak where probes would not be removed from outbound_payments on htlc fail
1 parent 30b9d9f commit a2b956d

File tree

2 files changed

+10
-5
lines changed

2 files changed

+10
-5
lines changed

lightning/src/ln/outbound_payment.rs

+7-5
Original file line numberDiff line numberDiff line change
@@ -1062,17 +1062,19 @@ impl OutboundPayments {
10621062
});
10631063
}
10641064

1065-
if !payment_is_probe && (!is_retryable_now || !payment_retryable || retry.is_none()) {
1065+
if payment_is_probe || !is_retryable_now || !payment_retryable || retry.is_none() {
10661066
let _ = payment.get_mut().mark_abandoned(); // we'll only Err if it's a legacy payment
10671067
is_retryable_now = false;
10681068
}
10691069
if payment.get().remaining_parts() == 0 {
10701070
all_paths_failed = true;
10711071
if payment.get().abandoned() {
1072-
full_failure_ev = Some(events::Event::PaymentFailed {
1073-
payment_id: *payment_id,
1074-
payment_hash: payment.get().payment_hash().expect("PendingOutboundPayments::RetriesExceeded always has a payment hash set"),
1075-
});
1072+
if !payment_is_probe {
1073+
full_failure_ev = Some(events::Event::PaymentFailed {
1074+
payment_id: *payment_id,
1075+
payment_hash: payment.get().payment_hash().expect("PendingOutboundPayments::RetriesExceeded always has a payment hash set"),
1076+
});
1077+
}
10761078
payment.remove();
10771079
}
10781080
}

lightning/src/ln/payment_tests.rs

+3
Original file line numberDiff line numberDiff line change
@@ -941,6 +941,7 @@ fn successful_probe_yields_event() {
941941
},
942942
_ => panic!(),
943943
};
944+
assert!(!nodes[0].node.has_pending_payments());
944945
}
945946

946947
#[test]
@@ -986,6 +987,7 @@ fn failed_probe_yields_event() {
986987
},
987988
_ => panic!(),
988989
};
990+
assert!(!nodes[0].node.has_pending_payments());
989991
}
990992

991993
#[test]
@@ -1040,6 +1042,7 @@ fn onchain_failed_probe_yields_event() {
10401042
}
10411043
}
10421044
assert!(found_probe_failed);
1045+
assert!(!nodes[0].node.has_pending_payments());
10431046
}
10441047

10451048
#[test]

0 commit comments

Comments
 (0)