| ... | @@ -158,7 +158,7 @@ const PosixEvent = struct { | ... | @@ -158,7 +158,7 @@ const PosixEvent = struct { |
| 158 | var tv: os.darwin.timeval = undefined; | 158 | var tv: os.darwin.timeval = undefined; |
| 159 | assert(os.darwin.gettimeofday(&tv, null) == 0); | 159 | assert(os.darwin.gettimeofday(&tv, null) == 0); |
| 160 | timeout_abs += @intCast(u64, tv.tv_sec) * time.ns_per_s; | 160 | timeout_abs += @intCast(u64, tv.tv_sec) * time.ns_per_s; |
| 161 | timeout_abs += @intCast(u64, tv.tv_usec) * time.us_per_s; | 161 | timeout_abs += @intCast(u64, tv.tv_usec) * time.ns_per_us; |
| 162 | } else { | 162 | } else { |
| 163 | os.clock_gettime(os.CLOCK_REALTIME, &ts) catch unreachable; | 163 | os.clock_gettime(os.CLOCK_REALTIME, &ts) catch unreachable; |
| 164 | timeout_abs += @intCast(u64, ts.tv_sec) * time.ns_per_s; | 164 | timeout_abs += @intCast(u64, ts.tv_sec) * time.ns_per_s; |
| ... | @@ -431,6 +431,20 @@ test "std.ResetEvent" { | ... | @@ -431,6 +431,20 @@ test "std.ResetEvent" { |
| 431 | self.in.wait(); | 431 | self.in.wait(); |
| 432 | assert(self.value == 3); | 432 | assert(self.value == 3); |
| 433 | } | 433 | } |
| | 434 | |
| | 435 | fn sleeper(self: *Self) void { |
| | 436 | self.in.set(); |
| | 437 | time.sleep(time.ns_per_ms * 2); |
| | 438 | self.value = 5; |
| | 439 | self.out.set(); |
| | 440 | } |
| | 441 | |
| | 442 | fn timedWaiter(self: *Self) !void { |
| | 443 | self.in.wait(); |
| | 444 | testing.expectError(error.TimedOut, self.out.timedWait(time.ns_per_us)); |
| | 445 | try self.out.timedWait(time.ns_per_ms * 10); |
| | 446 | testing.expect(self.value == 5); |
| | 447 | } |
| 434 | }; | 448 | }; |
| 435 | | 449 | |
| 436 | var context = Context.init(); | 450 | var context = Context.init(); |
| ... | @@ -438,4 +452,10 @@ test "std.ResetEvent" { | ... | @@ -438,4 +452,10 @@ test "std.ResetEvent" { |
| 438 | const receiver = try std.Thread.spawn(&context, Context.receiver); | 452 | const receiver = try std.Thread.spawn(&context, Context.receiver); |
| 439 | defer receiver.wait(); | 453 | defer receiver.wait(); |
| 440 | context.sender(); | 454 | context.sender(); |
| | 455 | |
| | 456 | var timed = Context.init(); |
| | 457 | defer timed.deinit(); |
| | 458 | const sleeper = try std.Thread.spawn(&timed, Context.sleeper); |
| | 459 | defer sleeper.wait(); |
| | 460 | try timed.timedWaiter(); |
| 441 | } | 461 | } |