Skip to content

Commit 9df8d44

Browse files
committed
Consolidate candidate access in add_entry during routing
Because fetching fields from the `$candidate` often implies an indirect read, grouping them together may result in one or two fewer memory loads, so we do so here.
1 parent 494e940 commit 9df8d44

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

lightning/src/routing/router.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2223,6 +2223,8 @@ where L::Target: Logger {
22232223
// if the amount being transferred over this path is lower.
22242224
// We do this for now, but this is a subject for removal.
22252225
if let Some(mut available_value_contribution_msat) = htlc_maximum_msat.checked_sub($next_hops_fee_msat) {
2226+
let cltv_expiry_delta = $candidate.cltv_expiry_delta();
2227+
let htlc_minimum_msat = $candidate.htlc_minimum_msat();
22262228
let used_liquidity_msat = used_liquidities
22272229
.get(&$candidate.id())
22282230
.map_or(0, |used_liquidity_msat| {
@@ -2245,7 +2247,7 @@ where L::Target: Logger {
22452247
.checked_sub(2*MEDIAN_HOP_CLTV_EXPIRY_DELTA)
22462248
.unwrap_or(payment_params.max_total_cltv_expiry_delta - final_cltv_expiry_delta);
22472249
let hop_total_cltv_delta = ($next_hops_cltv_delta as u32)
2248-
.saturating_add($candidate.cltv_expiry_delta());
2250+
.saturating_add(cltv_expiry_delta);
22492251
let exceeds_cltv_delta_limit = hop_total_cltv_delta > max_total_cltv_expiry_delta;
22502252

22512253
let value_contribution_msat = cmp::min(available_value_contribution_msat, $next_hops_value_contribution);
@@ -2255,7 +2257,6 @@ where L::Target: Logger {
22552257
// Can't overflow due to how the values were computed right above.
22562258
None => unreachable!(),
22572259
};
2258-
let htlc_minimum_msat = $candidate.htlc_minimum_msat();
22592260
#[allow(unused_comparisons)] // $next_hops_path_htlc_minimum_msat is 0 in some calls so rustc complains
22602261
let over_path_minimum_msat = amount_to_transfer_over_msat >= htlc_minimum_msat &&
22612262
amount_to_transfer_over_msat >= $next_hops_path_htlc_minimum_msat;
@@ -2345,12 +2346,14 @@ where L::Target: Logger {
23452346
// payment path (upstream to the payee). To avoid that, we recompute
23462347
// path fees knowing the final path contribution after constructing it.
23472348
let curr_min = cmp::max(
2348-
$next_hops_path_htlc_minimum_msat, $candidate.htlc_minimum_msat()
2349+
$next_hops_path_htlc_minimum_msat, htlc_minimum_msat
23492350
);
2350-
let path_htlc_minimum_msat = compute_fees_saturating(curr_min, $candidate.fees())
2351+
let candidate_fees = $candidate.fees();
2352+
let src_node_counter = $candidate.src_node_counter();
2353+
let path_htlc_minimum_msat = compute_fees_saturating(curr_min, candidate_fees)
23512354
.saturating_add(curr_min);
23522355

2353-
let dist_entry = &mut dist[$candidate.src_node_counter() as usize];
2356+
let dist_entry = &mut dist[src_node_counter as usize];
23542357
let old_entry = if let Some(hop) = dist_entry {
23552358
hop
23562359
} else {
@@ -2394,7 +2397,7 @@ where L::Target: Logger {
23942397
if src_node_id != our_node_id {
23952398
// Note that `u64::max_value` means we'll always fail the
23962399
// `old_entry.total_fee_msat > total_fee_msat` check below
2397-
hop_use_fee_msat = compute_fees_saturating(amount_to_transfer_over_msat, $candidate.fees());
2400+
hop_use_fee_msat = compute_fees_saturating(amount_to_transfer_over_msat, candidate_fees);
23982401
total_fee_msat = total_fee_msat.saturating_add(hop_use_fee_msat);
23992402
}
24002403

0 commit comments

Comments
 (0)