Skip to content

Commit e7172e5

Browse files
committed
fix(tests): wrap SlotTracker in RwMux for thread-safe access in checkAndHandleNewRoot test
1 parent 8d43e03 commit e7172e5

File tree

1 file changed

+21
-13
lines changed

1 file changed

+21
-13
lines changed

src/replay/consensus/core.zig

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2727,16 +2727,17 @@ test "checkAndHandleNewRoot - success" {
27272727
var fixture = try TestFixture.init(allocator, root);
27282728
defer fixture.deinit(allocator);
27292729

2730-
const processed_slot: sig.replay.trackers.ForkChoiceProcessedSlot = .{};
2731-
const confirmed_slot: sig.replay.trackers.OptimisticallyConfirmedSlot = .{};
2732-
2733-
var slot_tracker4: SlotTracker = .{
2734-
.root = .init(root.slot),
2730+
var slot_tracker4 = RwMux(SlotTracker).init(.{
2731+
.root = std.atomic.Value(Slot).init(root.slot),
27352732
.slots = .empty,
2736-
.latest_processed_slot = processed_slot,
2737-
.latest_confirmed_slot = confirmed_slot,
2738-
};
2739-
defer slot_tracker4.deinit(allocator);
2733+
.latest_processed_slot = .{},
2734+
.latest_confirmed_slot = .{},
2735+
});
2736+
defer {
2737+
const ptr, var lg = slot_tracker4.writeWithLock();
2738+
defer lg.unlock();
2739+
ptr.deinit(allocator);
2740+
}
27402741

27412742
{
27422743
var constants2 = try SlotConstants.genesis(allocator, .initRandom(random));
@@ -2756,11 +2757,13 @@ test "checkAndHandleNewRoot - success" {
27562757
state2.hash = .init(hash2.hash);
27572758
state3.hash = .init(hash3.hash);
27582759

2759-
try slot_tracker4.put(allocator, hash2.slot, .{
2760+
const ptr, var lg = slot_tracker4.writeWithLock();
2761+
defer lg.unlock();
2762+
try ptr.put(allocator, hash2.slot, .{
27602763
.constants = constants2,
27612764
.state = state2,
27622765
});
2763-
try slot_tracker4.put(allocator, hash3.slot, .{
2766+
try ptr.put(allocator, hash3.slot, .{
27642767
.constants = constants3,
27652768
.state = state3,
27662769
});
@@ -2813,8 +2816,13 @@ test "checkAndHandleNewRoot - success" {
28132816
}
28142817

28152818
try testing.expectEqual(1, fixture.progress.map.count());
2816-
for (slot_tracker4.slots.keys()) |remaining_slots| {
2817-
try testing.expect(remaining_slots >= hash3.slot);
2819+
// Now the write lock is released, we can acquire a read lock
2820+
{
2821+
const ptr, var lg = slot_tracker4.readWithLock();
2822+
defer lg.unlock();
2823+
for (ptr.slots.keys()) |remaining_slots| {
2824+
try testing.expect(remaining_slots >= hash3.slot);
2825+
}
28182826
}
28192827
try testing.expect(!fixture.progress.map.contains(hash1.slot));
28202828
}

0 commit comments

Comments
 (0)