--- base/allocator/partition_allocator/src/partition_alloc/spinning_mutex.cc.orig 2026-08-13 07:41:05 UTC +++ base/allocator/partition_allocator/src/partition_alloc/spinning_mutex.cc @@ -20,7 +20,16 @@ #endif #if PA_CONFIG(HAS_LINUX_KERNEL) +#if defined(OS_OPENBSD) +#include +#include +#elif defined(OS_FREEBSD) +#include +#include +#include +#else #include +#endif #include #include @@ -150,8 +159,16 @@ PA_ALWAYS_INLINE long FutexSyscall(volatile void* ftx, int saved_errno = errno; errno = 0; +#if defined(OS_FREEBSD) + long retval = _umtx_op(&state_, UMTX_OP_WAIT_UINT_PRIVATE, + kLockedContended, nullptr, nullptr); +#elif defined(OS_OPENBSD) + long retval = futex(reinterpret_cast(&state_), FUTEX_WAIT | FUTEX_PRIVATE_FLAG, + kLockedContended, nullptr, nullptr); +#else long retval = syscall(SYS_futex, ftx, op | FUTEX_PRIVATE_FLAG, value, nullptr, nullptr, 0); +#endif if (retval == -1) { // These are programming errors, check them. [[maybe_unused]] const int futex_errno = errno;