aboutsummaryrefslogtreecommitdiff
path: root/src/threading.cpp
diff options
context:
space:
mode:
authorgingerBill <gingerBill@users.noreply.github.com>2023-01-10 16:25:38 +0000
committerGitHub <noreply@github.com>2023-01-10 16:25:38 +0000
commit15469758de19e70ff5499fd353758ba8618026b8 (patch)
tree098dfd51ba97c4464173e05dc19baa95b4ab8579 /src/threading.cpp
parent8ef406324bd500cfd9f3d857e3a5d51adce33374 (diff)
parent86511d44e46b6271b01df2cd1ebb83b5496e143c (diff)
Merge branch 'master' into compiler-improvements-2023-01
Diffstat (limited to 'src/threading.cpp')
-rw-r--r--src/threading.cpp8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/threading.cpp b/src/threading.cpp
index bf298e024..52e6b722a 100644
--- a/src/threading.cpp
+++ b/src/threading.cpp
@@ -699,7 +699,7 @@ extern "C" int __ulock_wake(uint32_t operation, void *addr, uint64_t wake_value)
gb_internal void futex_signal(Futex *f) {
for (;;) {
int ret = __ulock_wake(UL_COMPARE_AND_WAIT | ULF_NO_ERRNO, f, 0);
- if (ret == 0) {
+ if (ret >= 0) {
return;
}
if (ret == -EINTR || ret == -EFAULT) {
@@ -732,14 +732,14 @@ gb_internal void futex_broadcast(Futex *f) {
gb_internal void futex_wait(Futex *f, Footex val) {
for (;;) {
int ret = __ulock_wait(UL_COMPARE_AND_WAIT | ULF_NO_ERRNO, f, val, 0);
- if (ret == 0) {
+ if (ret >= 0) {
if (*f != val) {
return;
}
continue;
}
- if (ret == -EINTR || ret == -EFAULT) {
- -continue;
+ if (ret == -EINTR || ret == -EFAULT) {continue;
+ ret = -ret;
}
if (ret == -ENOENT) {
return;