Skip to content

Commit 2f14891

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 42c2350 commit 2f14891

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
@@ -1065,17 +1065,19 @@ impl OutboundPayments {
10651065
});
10661066
}
10671067

1068-
if !payment_is_probe && (!is_retryable_now || !payment_retryable || retry.is_none()) {
1068+
if payment_is_probe || !is_retryable_now || !payment_retryable || retry.is_none() {
10691069
let _ = payment.get_mut().mark_abandoned(); // we'll only Err if it's a legacy payment
10701070
is_retryable_now = false;
10711071
}
10721072
if payment.get().remaining_parts() == 0 {
10731073
all_paths_failed = true;
10741074
if payment.get().abandoned() {
1075-
full_failure_ev = Some(events::Event::PaymentFailed {
1076-
payment_id: *payment_id,
1077-
payment_hash: payment.get().payment_hash().expect("PendingOutboundPayments::RetriesExceeded always has a payment hash set"),
1078-
});
1075+
if !payment_is_probe {
1076+
full_failure_ev = Some(events::Event::PaymentFailed {
1077+
payment_id: *payment_id,
1078+
payment_hash: payment.get().payment_hash().expect("PendingOutboundPayments::RetriesExceeded always has a payment hash set"),
1079+
});
1080+
}
10791081
payment.remove();
10801082
}
10811083
}

lightning/src/ln/payment_tests.rs

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

947948
#[test]
@@ -987,6 +988,7 @@ fn failed_probe_yields_event() {
987988
},
988989
_ => panic!(),
989990
};
991+
assert!(!nodes[0].node.has_pending_payments());
990992
}
991993

992994
#[test]
@@ -1041,6 +1043,7 @@ fn onchain_failed_probe_yields_event() {
10411043
}
10421044
}
10431045
assert!(found_probe_failed);
1046+
assert!(!nodes[0].node.has_pending_payments());
10441047
}
10451048

10461049
#[test]

0 commit comments

Comments
 (0)