The gap limit was checked such as if the last_index was not None but the
last_active_index was, we'd consider having reached it. But the
last_index is never None for this check. This effectively made it so the
gap limit was always 1: if the first address isn't used
last_active_index will be None and we'd return immediately.
Fix this by avoiding error-prone Option comparisons and correctly
checking we've reached the gap limit before breaking out of the loop.
}
}
- if last_index > last_active_index.map(|i| i.saturating_add(stop_gap as u32)) {
+ let last_index = last_index.expect("Must be set since handles wasn't empty.");
+ let past_gap_limit = if let Some(i) = last_active_index {
+ last_index > i.saturating_add(stop_gap as u32)
+ } else {
+ last_index >= stop_gap as u32
+ };
+ if past_gap_limit {
break;
}
}