Skip to content

Commit f35f551

Browse files
authored
Merge pull request #1 from ChainSafe/grapebaba/condescending-feistel
refactor: migrate to Zig 0.16.0-dev.2676 PriorityQueue API
2 parents 35eb80a + 915ca21 commit f35f551

File tree

2 files changed

+13
-8
lines changed

2 files changed

+13
-8
lines changed

src/EventClock.zig

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ pub fn init(self: *EventClock, allocator: Allocator, config: Config, io_handle:
8888
.allocator = allocator,
8989
.io = io_handle,
9090
.clock = undefined,
91-
.waiters = WaiterQueue.init(allocator, {}),
91+
.waiters = WaiterQueue.initContext({}),
9292
};
9393
self.clock = SlotClock.init(config, TimeSource.fromIo(&self.io)) catch return error.InvalidConfig;
9494
}
@@ -124,7 +124,8 @@ pub fn deinit(self: *EventClock) void {
124124
self.epoch_snapshot.deinit(self.allocator);
125125
self.slot_listeners.deinit(self.allocator);
126126
self.epoch_listeners.deinit(self.allocator);
127-
self.waiters.deinit();
127+
self.waiters.deinit(self.allocator);
128+
self.* = undefined;
128129
}
129130

130131
// ── Listener API ──
@@ -310,7 +311,7 @@ pub fn waitForSlot(self: *EventClock, target: Slot) Error!WaitForSlotResult {
310311
self.allocator.destroy(state);
311312
return WaitForSlotResult.immediate(error.Aborted);
312313
}
313-
self.waiters.add(.{ .target = target, .state = state }) catch return error.OutOfMemory;
314+
self.waiters.push(self.allocator, .{ .target = target, .state = state }) catch return error.OutOfMemory;
314315
self.dispatchWaiters(self.clock.current_slot);
315316

316317
return .{
@@ -329,7 +330,7 @@ pub fn cancelWait(self: *EventClock, result: *WaitForSlotResult) void {
329330
// won't dereference the freed state pointer.
330331
for (self.waiters.items, 0..) |entry, i| {
331332
if (entry.state == state) {
332-
_ = self.waiters.removeIndex(i);
333+
_ = self.waiters.popIndex(i);
333334
break;
334335
}
335336
}
@@ -395,14 +396,14 @@ fn dispatchWaiters(self: *EventClock, current_slot: ?Slot) void {
395396
const slot = current_slot orelse return;
396397
while (self.waiters.peek()) |head| {
397398
if (head.target > slot) break;
398-
const waiter = self.waiters.remove();
399+
const waiter = self.waiters.pop().?;
399400
waiter.state.aborted = false;
400401
waiter.state.event.set(waiter.state.io);
401402
}
402403
}
403404

404405
fn abortAllWaiters(self: *EventClock) void {
405-
while (self.waiters.removeOrNull()) |waiter| {
406+
while (self.waiters.pop()) |waiter| {
406407
waiter.state.aborted = true;
407408
waiter.state.event.set(waiter.state.io);
408409
}

src/SlotClock.zig

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,12 @@ pub const AdvanceIterator = struct {
5252
// Check epoch boundary — epochAtSlot returns ?Epoch
5353
const prev_epoch = slot_math.epochAtSlot(self.clock.config, cur);
5454
const new_epoch = slot_math.epochAtSlot(self.clock.config, next_slot);
55-
if (prev_epoch != null and new_epoch != null and prev_epoch.? < new_epoch.?) {
56-
self.pending_epoch = new_epoch.?;
55+
if (prev_epoch) |prev_ep| {
56+
if (new_epoch) |new_ep| {
57+
if (prev_ep < new_ep) {
58+
self.pending_epoch = new_ep;
59+
}
60+
}
5761
}
5862

5963
return .{ .slot = next_slot };

0 commit comments

Comments
 (0)