From 511990c83ba7f27ddf62a2067fa9d773aff26aa2 Mon Sep 17 00:00:00 2001 From: afranchuk Date: Tue, 11 Jan 2022 13:04:24 -0500 Subject: [PATCH] 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. --- lib/std/Thread.zig | 24 ++++++++++++++++++++++++ lib/std/Thread/Condition.zig | 4 ++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/lib/std/Thread.zig b/lib/std/Thread.zig index f2203e2808..83c2992a45 100644 --- 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 index 615f68cd9b..848e17ddce 100644 --- 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 => {},