From 456a244d62df62940f4d860cd9f57b40d563ca96 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Sat, 17 Aug 2019 11:40:48 -0400 Subject: [PATCH] fix event loop regression on macos --- std/event/future.zig | 11 +++++------ std/event/loop.zig | 7 ++++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/std/event/future.zig b/std/event/future.zig index 70e20819b..117765a52 100644 --- a/std/event/future.zig +++ b/std/event/future.zig @@ -97,28 +97,27 @@ test "std.event.Future" { loop.run(); } -async fn testFuture(loop: *Loop) void { +fn testFuture(loop: *Loop) void { var future = Future(i32).init(loop); var a = async waitOnFuture(&future); var b = async waitOnFuture(&future); - var c = async resolveFuture(&future); + resolveFuture(&future); - // TODO make this work: + // TODO https://github.com/ziglang/zig/issues/3077 //const result = (await a) + (await b); const a_result = await a; const b_result = await b; const result = a_result + b_result; - await c; testing.expect(result == 12); } -async fn waitOnFuture(future: *Future(i32)) i32 { +fn waitOnFuture(future: *Future(i32)) i32 { return future.get().*; } -async fn resolveFuture(future: *Future(i32)) void { +fn resolveFuture(future: *Future(i32)) void { future.data = 6; future.resolve(); } diff --git a/std/event/loop.zig b/std/event/loop.zig index 6e61abf8d..242452237 100644 --- a/std/event/loop.zig +++ b/std/event/loop.zig @@ -149,14 +149,15 @@ pub const Loop = struct { .overlapped = ResumeNode.overlapped_init, }, }; - // We need an extra one of these in case the fs thread wants to use onNextTick + // We need at least one of these in case the fs thread wants to use onNextTick + const extra_thread_count = thread_count - 1; + const resume_node_count = std.math.max(extra_thread_count, 1); self.eventfd_resume_nodes = try self.allocator.alloc( std.atomic.Stack(ResumeNode.EventFd).Node, - thread_count, + resume_node_count, ); errdefer self.allocator.free(self.eventfd_resume_nodes); - const extra_thread_count = thread_count - 1; self.extra_threads = try self.allocator.alloc(*Thread, extra_thread_count); errdefer self.allocator.free(self.extra_threads);