diff --git a/src/internal/broadcaster.zig b/src/internal/broadcaster.zig index 69fc47d..d3d029a 100644 --- a/src/internal/broadcaster.zig +++ b/src/internal/broadcaster.zig @@ -350,7 +350,11 @@ pub const BroadcastQueue = struct { if (next_tail == self.head.load(.acquire)) { // full — release lock, yield, retry self.push_lock.store(0, .release); - full_spins += 1; + // saturate: this is a diagnostic counter, and the queue staying + // full is exactly when it must not take the process down. a + // stalled drain spun this past 2^32 and panicked the worker + // under ReleaseSafe, turning "consumers are slow" into a crash. + full_spins +|= 1; std.atomic.spinLoopHint(); continue; }