@@ -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