diff options
| author | Laytan Laats <laytanlaats@hotmail.com> | 2024-12-05 19:00:45 +0100 |
|---|---|---|
| committer | Laytan Laats <laytanlaats@hotmail.com> | 2024-12-05 19:00:45 +0100 |
| commit | ad438f418dca488438b769bb2a995b30bb8e50b8 (patch) | |
| tree | b3321ae3d4ee2638d6a6eebee410c652d5e219d8 /core/sync | |
| parent | d452d37b93cb3318f995adc74f84076c1b3103a5 (diff) | |
sync: fix futexes on wasm
Diffstat (limited to 'core/sync')
| -rw-r--r-- | core/sync/futex_wasm.odin | 20 |
1 files changed, 5 insertions, 15 deletions
diff --git a/core/sync/futex_wasm.odin b/core/sync/futex_wasm.odin index 0f9659a02..0bc8bcbf7 100644 --- a/core/sync/futex_wasm.odin +++ b/core/sync/futex_wasm.odin @@ -12,8 +12,8 @@ _futex_wait :: proc "contextless" (f: ^Futex, expected: u32) -> bool { when !intrinsics.has_target_feature("atomics") { panic_contextless("usage of `core:sync` requires the `-target-feature:\"atomics\"` or a `-microarch` that supports it") } else { - s := intrinsics.wasm_memory_atomic_wait32((^u32)(f), expected, -1) - return s != 0 + intrinsics.wasm_memory_atomic_wait32((^u32)(f), expected, -1) + return true } } @@ -22,7 +22,7 @@ _futex_wait_with_timeout :: proc "contextless" (f: ^Futex, expected: u32, durati panic_contextless("usage of `core:sync` requires the `-target-feature:\"atomics\"` or a `-microarch` that supports it") } else { s := intrinsics.wasm_memory_atomic_wait32((^u32)(f), expected, i64(duration)) - return s != 0 + return s != 2 } } @@ -30,12 +30,7 @@ _futex_signal :: proc "contextless" (f: ^Futex) { when !intrinsics.has_target_feature("atomics") { panic_contextless("usage of `core:sync` requires the `-target-feature:\"atomics\"` or a `-microarch` that supports it") } else { - loop: for { - s := intrinsics.wasm_memory_atomic_notify32((^u32)(f), 1) - if s >= 1 { - return - } - } + intrinsics.wasm_memory_atomic_notify32((^u32)(f), 1) } } @@ -43,12 +38,7 @@ _futex_broadcast :: proc "contextless" (f: ^Futex) { when !intrinsics.has_target_feature("atomics") { panic_contextless("usage of `core:sync` requires the `-target-feature:\"atomics\"` or a `-microarch` that supports it") } else { - loop: for { - s := intrinsics.wasm_memory_atomic_notify32((^u32)(f), ~u32(0)) - if s >= 0 { - return - } - } + intrinsics.wasm_memory_atomic_notify32((^u32)(f), max(u32)) } } |