implement semaphore take with timeout

This commit is contained in:
Nikita Smith
2026-06-02 12:10:01 -07:00
committed by Ryan Fleury
parent cb190ff9e3
commit 55172718c9
+3 -16
View File
@@ -669,22 +669,9 @@ semaphore_close(Semaphore semaphore)
internal B32 internal B32
semaphore_take(Semaphore semaphore, U64 endt_us) semaphore_take(Semaphore semaphore, U64 endt_us)
{ {
// TODO(rjf): we need to use `sem_timedwait` here. struct timespec t = { .tv_sec = endt_us / 1000000, .tv_nsec = (endt_us % 1000000) * 1000 };
AssertAlways(endt_us == max_U64); int err = OS_LNX_RETRY_ON_EINTR(sem_clockwait((sem_t*)semaphore.u64[0], CLOCK_MONOTONIC, &t));
for(;;) return err == 0;
{
int err = sem_wait((sem_t*)semaphore.u64[0]);
if(err == 0)
{
break;
}
else if(errno == EAGAIN)
{
continue;
}
break;
}
return 1;
} }
internal void internal void