aboutsummaryrefslogtreecommitdiff
path: root/lib/std
diff options
context:
space:
mode:
authorJeremy Huffman <jeremy@jeremyhuffman.com>2020-11-06 14:01:52 -0500
committerGitHub <noreply@github.com>2020-11-06 14:01:52 -0500
commit9f1639a6bbedf44dc920f1c53f1eda11d22f4e34 (patch)
treed2bcaa523f58377379b6b59e84d847bae3b56cc1 /lib/std
parenta9e09a8be4ff6a15dabb1362a6833e6b0af66b22 (diff)
downloadzig-9f1639a6bbedf44dc920f1c53f1eda11d22f4e34.tar.gz
zig-9f1639a6bbedf44dc920f1c53f1eda11d22f4e34.zip
Fix std.ResetEvent.timedWait on darwin/macOS. (#6914)
Diffstat (limited to 'lib/std')
-rw-r--r--lib/std/reset_event.zig22
1 files changed, 21 insertions, 1 deletions
diff --git a/lib/std/reset_event.zig b/lib/std/reset_event.zig
index 31e6c28cf8..20bbd9b7af 100644
--- a/lib/std/reset_event.zig
+++ b/lib/std/reset_event.zig
@@ -158,7 +158,7 @@ const PosixEvent = struct {
var tv: os.darwin.timeval = undefined;
assert(os.darwin.gettimeofday(&tv, null) == 0);
timeout_abs += @intCast(u64, tv.tv_sec) * time.ns_per_s;
- timeout_abs += @intCast(u64, tv.tv_usec) * time.us_per_s;
+ timeout_abs += @intCast(u64, tv.tv_usec) * time.ns_per_us;
} else {
os.clock_gettime(os.CLOCK_REALTIME, &ts) catch unreachable;
timeout_abs += @intCast(u64, ts.tv_sec) * time.ns_per_s;
@@ -431,6 +431,20 @@ test "std.ResetEvent" {
self.in.wait();
assert(self.value == 3);
}
+
+ fn sleeper(self: *Self) void {
+ self.in.set();
+ time.sleep(time.ns_per_ms * 2);
+ self.value = 5;
+ self.out.set();
+ }
+
+ fn timedWaiter(self: *Self) !void {
+ self.in.wait();
+ testing.expectError(error.TimedOut, self.out.timedWait(time.ns_per_us));
+ try self.out.timedWait(time.ns_per_ms * 10);
+ testing.expect(self.value == 5);
+ }
};
var context = Context.init();
@@ -438,4 +452,10 @@ test "std.ResetEvent" {
const receiver = try std.Thread.spawn(&context, Context.receiver);
defer receiver.wait();
context.sender();
+
+ var timed = Context.init();
+ defer timed.deinit();
+ const sleeper = try std.Thread.spawn(&timed, Context.sleeper);
+ defer sleeper.wait();
+ try timed.timedWaiter();
}