aboutsummaryrefslogtreecommitdiff
path: root/core/sync
diff options
context:
space:
mode:
authorLaytan Laats <laytanlaats@hotmail.com>2024-12-05 19:00:45 +0100
committerLaytan Laats <laytanlaats@hotmail.com>2024-12-05 19:00:45 +0100
commitad438f418dca488438b769bb2a995b30bb8e50b8 (patch)
treeb3321ae3d4ee2638d6a6eebee410c652d5e219d8 /core/sync
parentd452d37b93cb3318f995adc74f84076c1b3103a5 (diff)
sync: fix futexes on wasm
Diffstat (limited to 'core/sync')
-rw-r--r--core/sync/futex_wasm.odin20
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))
}
}