commit 511990c83ba7f27ddf62a2067fa9d773aff26aa2 (tree)
parent 9fa55ae77745da919cf14ee771dd5ee02f667205
Author: afranchuk <alex.franchuk@gmail.com>
Date: Tue, 11 Jan 2022 13:04:24 -0500
Fix a bug in std.Thread.Condition and add a basic Condition test. (#10538)
* Fix FUTEX usage in std.Thread.Condition - It was using an old name.
Diffstat:
2 files changed, 26 insertions(+), 2 deletions(-)
diff --git a/lib/std/Thread.zig b/lib/std/Thread.zig
@@ -1151,3 +1151,27 @@ test "Thread.detach" {
event.wait();
try std.testing.expectEqual(value, 1);
}
+
+fn testWaitForSignal(mutex: *Mutex, cond: *Condition) void {
+ mutex.lock();
+ defer mutex.unlock();
+ cond.signal();
+ cond.wait(mutex);
+}
+
+test "Condition.signal" {
+ if (builtin.single_threaded) return error.SkipZigTest;
+
+ var mutex = Mutex{};
+ var cond = Condition{};
+
+ var thread: Thread = undefined;
+ {
+ mutex.lock();
+ defer mutex.unlock();
+ thread = try Thread.spawn(.{}, testWaitForSignal, .{ &mutex, &cond });
+ cond.wait(&mutex);
+ cond.signal();
+ }
+ thread.join();
+}
diff --git a/lib/std/Thread/Condition.zig b/lib/std/Thread/Condition.zig
@@ -106,7 +106,7 @@ pub const AtomicCondition = struct {
.linux => {
switch (linux.getErrno(linux.futex_wait(
&cond.futex,
- linux.FUTEX_PRIVATE_FLAG | linux.FUTEX_WAIT,
+ linux.FUTEX.PRIVATE_FLAG | linux.FUTEX.WAIT,
0,
null,
))) {
@@ -128,7 +128,7 @@ pub const AtomicCondition = struct {
.linux => {
switch (linux.getErrno(linux.futex_wake(
&cond.futex,
- linux.FUTEX_PRIVATE_FLAG | linux.FUTEX_WAKE,
+ linux.FUTEX.PRIVATE_FLAG | linux.FUTEX.WAKE,
1,
))) {
.SUCCESS => {},