aboutsummaryrefslogtreecommitdiff
path: root/src/threading.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2023-01-02 22:13:49 +0000
committergingerBill <bill@gingerbill.org>2023-01-02 22:13:49 +0000
commitbc9ee8e1a4ce797a894e5648fa92216c212b6999 (patch)
tree5b4d860861c41a3502ad51c75c760fd5b0942d45 /src/threading.cpp
parentd36c3c2590d28bbfc8bc887b9dd0aebc3ac92667 (diff)
Remove loops within futex signals on Linux
Diffstat (limited to 'src/threading.cpp')
-rw-r--r--src/threading.cpp24
1 files changed, 8 insertions, 16 deletions
diff --git a/src/threading.cpp b/src/threading.cpp
index cda8fe89b..aca77cd8f 100644
--- a/src/threading.cpp
+++ b/src/threading.cpp
@@ -472,26 +472,18 @@ gb_internal void thread_set_name(Thread *t, char const *name) {
#include <sys/syscall.h>
gb_internal void futex_signal(Futex *addr) {
- for (;;) {
- int ret = syscall(SYS_futex, addr, FUTEX_WAKE | FUTEX_PRIVATE_FLAG, 1, NULL, NULL, 0);
- if (ret == -1) {
- perror("Futex wake");
- GB_PANIC("Failed in futex wake!\n");
- } else if (ret > 0) {
- return;
- }
+ int ret = syscall(SYS_futex, addr, FUTEX_WAKE | FUTEX_PRIVATE_FLAG, 1, NULL, NULL, 0);
+ if (ret == -1) {
+ perror("Futex wake");
+ GB_PANIC("Failed in futex wake!\n");
}
}
gb_internal void futex_broadcast(Futex *addr) {
- for (;;) {
- int ret = syscall(SYS_futex, addr, FUTEX_WAKE | FUTEX_PRIVATE_FLAG, INT32_MAX, NULL, NULL, 0);
- if (ret == -1) {
- perror("Futex wake");
- GB_PANIC("Failed in futex wake!\n");
- } else if (ret > 0) {
- return;
- }
+ int ret = syscall(SYS_futex, addr, FUTEX_WAKE | FUTEX_PRIVATE_FLAG, INT32_MAX, NULL, NULL, 0);
+ if (ret == -1) {
+ perror("Futex wake");
+ GB_PANIC("Failed in futex wake!\n");
}
}