Skip to content

Commit 0c0cb6f

Browse files
committed
Don't bump the next_node_counter when using a removed counter
If we manage to pull a `node_counter` from `removed_node_counters` for reuse, `add_channel_between_nodes` would `unwrap_or` with the `next_node_counter`-incremented value. This visually looks right, except `unwrap_or` is always called, causing us to always increment `next_node_counter` even if we don't use it. This will result in the `node_counter`s always growing any time we add a new node to our graph, leading to somewhat larger memory usage when routing and a debug assertion failure in `test_node_counter_consistency`. The fix is trivial, this is what `unwrap_or_else` is for.
1 parent 46d8a0d commit 0c0cb6f

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

lightning/src/routing/gossip.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -2077,9 +2077,9 @@ where
20772077
},
20782078
IndexedMapEntry::Vacant(node_entry) => {
20792079
let mut removed_node_counters = self.removed_node_counters.lock().unwrap();
2080-
**chan_info_node_counter = removed_node_counters
2081-
.pop()
2082-
.unwrap_or(self.next_node_counter.fetch_add(1, Ordering::Relaxed) as u32);
2080+
**chan_info_node_counter = removed_node_counters.pop().unwrap_or_else(|| {
2081+
self.next_node_counter.fetch_add(1, Ordering::Relaxed) as u32
2082+
});
20832083
node_entry.insert(NodeInfo {
20842084
channels: vec![short_channel_id],
20852085
announcement_info: None,

0 commit comments

Comments
 (0)