diff options
Diffstat (limited to 'src/threading.cpp')
| -rw-r--r-- | src/threading.cpp | 8 |
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; |