From 04a4dbcdafe9a1e31c4bce215dfd5222c3e7275e Mon Sep 17 00:00:00 2001 From: Colin Davidson Date: Thu, 29 Dec 2022 11:05:31 -0800 Subject: [PATCH] add freebsd support --- src/threading.cpp | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/threading.cpp b/src/threading.cpp index 70a7072e7..1de277259 100644 --- a/src/threading.cpp +++ b/src/threading.cpp @@ -473,6 +473,37 @@ gb_internal void tpool_wait_on_addr(Futex *addr, Footex val) { } } } + +#if defined(GB_SYSTEM_FREEBSD) + +#include +#include + +typedef std::atomic Futex; +typedef volatile int32_t Footex; + +gb_internal void tpool_wake_addr(Futex *addr) { + _umtx_op(addr, UMTX_OP_WAKE, 1, 0, 0); +} + +gb_internal void tpool_wait_on_addr(Futex *addr, Footex val) { + for (;;) { + int ret = _umtx_op(addr, UMTX_OP_WAIT_UINT, val, 0, NULL); + if (ret == 0) { + if (errno == ETIMEDOUT || errno == EINTR) { + continue; + } + + perror("Futex wait"); + GB_PANIC("Failed in futex wait!\n"); + } else if (ret == 0) { + if (*addr != val) { + return; + } + } + } +} + #elif defined(GB_SYSTEM_OSX) typedef std::atomic Futex;