//////////////////////////////////////////////////////////// //~ @hookimpl Not-equal futex ops void FutexYieldNeq(volatile void *addr, void *cmp, u8 cmp_size, i64 timeout_ns) { if (timeout_ns > 0) { DWORD timeout_ms; if (timeout_ns >= 3153600000000000000ull) // ~100 years { timeout_ms = INFINITE; } else { timeout_ms = (DWORD)(SecondsFromNs(timeout_ns) * 1000.0); } WaitOnAddress(addr, cmp, cmp_size, timeout_ms); } } void FutexWakeNeq(void *addr) { WakeByAddressAll(addr); } //////////////////////////////////////////////////////////// //~ @hookimpl Greater-than-or-equal futex ops void FutexYieldGte(volatile void *addr, void *cmp, u8 cmp_size, i64 timeout_ns) { // TODO: Actually implement this. Just emulating via neq for now. FutexYieldNeq(addr, cmp, cmp_size, timeout_ns); } void FutexWakeGte(void *addr) { // TODO: Actually implement this. Just emulating via neq for now. FutexWakeNeq(addr); }