mirror of
https://github.com/ziglang/zig.git
synced 2025-12-07 14:53:08 +00:00
Fix std.ResetEvent.timedWait on darwin/macOS. (#6914)
This commit is contained in:
parent
a9e09a8be4
commit
9f1639a6bb
@ -158,7 +158,7 @@ const PosixEvent = struct {
|
|||||||
var tv: os.darwin.timeval = undefined;
|
var tv: os.darwin.timeval = undefined;
|
||||||
assert(os.darwin.gettimeofday(&tv, null) == 0);
|
assert(os.darwin.gettimeofday(&tv, null) == 0);
|
||||||
timeout_abs += @intCast(u64, tv.tv_sec) * time.ns_per_s;
|
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 {
|
} else {
|
||||||
os.clock_gettime(os.CLOCK_REALTIME, &ts) catch unreachable;
|
os.clock_gettime(os.CLOCK_REALTIME, &ts) catch unreachable;
|
||||||
timeout_abs += @intCast(u64, ts.tv_sec) * time.ns_per_s;
|
timeout_abs += @intCast(u64, ts.tv_sec) * time.ns_per_s;
|
||||||
@ -431,6 +431,20 @@ test "std.ResetEvent" {
|
|||||||
self.in.wait();
|
self.in.wait();
|
||||||
assert(self.value == 3);
|
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();
|
var context = Context.init();
|
||||||
@ -438,4 +452,10 @@ test "std.ResetEvent" {
|
|||||||
const receiver = try std.Thread.spawn(&context, Context.receiver);
|
const receiver = try std.Thread.spawn(&context, Context.receiver);
|
||||||
defer receiver.wait();
|
defer receiver.wait();
|
||||||
context.sender();
|
context.sender();
|
||||||
|
|
||||||
|
var timed = Context.init();
|
||||||
|
defer timed.deinit();
|
||||||
|
const sleeper = try std.Thread.spawn(&timed, Context.sleeper);
|
||||||
|
defer sleeper.wait();
|
||||||
|
try timed.timedWaiter();
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user