From 0d317cea8c23ff8f2b143270983ef35de15c3db7 Mon Sep 17 00:00:00 2001 From: onyinyang Date: Thu, 11 May 2023 16:51:24 -0400 Subject: [PATCH] Fix replace bridge to align with changes to lox-distributor --- crates/lox-library/src/lib.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/crates/lox-library/src/lib.rs b/crates/lox-library/src/lib.rs index 5fc9eb7..af56ecb 100644 --- a/crates/lox-library/src/lib.rs +++ b/crates/lox-library/src/lib.rs @@ -408,9 +408,7 @@ impl BridgeAuth { let reachable_bridges = &self.bridge_table.reachable.clone(); if let Some(positions) = reachable_bridges.get(bridge) { for (bucketnum, offset) in positions.iter() { - // Remove the bridge from the bucket assert!(self.bridge_table.buckets[*bucketnum as usize][*offset] == *bridge); - self.bridge_table.reachable.remove(bridge); if available_bridge.is_some() { self.bridge_table.buckets[*bucketnum as usize][*offset] = *available_bridge.unwrap(); @@ -418,6 +416,8 @@ impl BridgeAuth { self.bridge_table .reachable .insert(*available_bridge.unwrap(), positions.clone()); + // Remove the bridge from the bucket + self.bridge_table.reachable.remove(bridge); res = true } else if !self.bridge_table.unallocated_bridges.is_empty() { self.bridge_table.buckets[*bucketnum as usize][*offset] = @@ -427,6 +427,8 @@ impl BridgeAuth { self.bridge_table.unallocated_bridges.pop().unwrap(), positions.clone(), ); + // Remove the bridge from the bucket + self.bridge_table.reachable.remove(bridge); res = true } else if !self.bridge_table.spares.is_empty() { // Get the first spare and remove it from the spares @@ -451,11 +453,16 @@ impl BridgeAuth { self.bridge_table .reachable .insert(*replacement, positions.clone()); + // Remove the bridge from the bucket + self.bridge_table.reachable.remove(bridge); res = true } // If there are no available bridges that can be assigned here, the only thing // that can be done is return an indication that updating the gone bridge // didn't work. + // In this case, we do not mark the bridge as unreachable or remove it from the + // reachable bridges so that we can still find it when a new bridge does become available + // Now we should check that the bucket hasn't become "blocked" due to having no available // bridges