null check semaphore otherwise sem_* crashes

This commit is contained in:
Nikita Smith
2026-06-02 12:10:11 -07:00
committed by Ryan Fleury
parent 7c6ad4c563
commit 3da0b89ac6
+12 -15
View File
@@ -661,37 +661,34 @@ semaphore_open(String8 name)
internal void
semaphore_close(Semaphore semaphore)
{
if(semaphore.u64[0] != 0)
{
sem_t *s = (sem_t *)semaphore.u64[0];
sem_close(s);
}
}
internal B32
semaphore_take(Semaphore semaphore, U64 endt_us)
{
int err = -1;
if(semaphore.u64[0] != 0)
{
struct timespec t = { .tv_sec = endt_us / 1000000, .tv_nsec = (endt_us % 1000000) * 1000 };
int err = OS_LNX_RETRY_ON_EINTR(sem_clockwait((sem_t*)semaphore.u64[0], CLOCK_MONOTONIC, &t));
err = OS_LNX_RETRY_ON_EINTR(sem_clockwait((sem_t*)semaphore.u64[0], CLOCK_MONOTONIC, &t));
}
return err == 0;
}
internal void
semaphore_drop(Semaphore semaphore)
{
for(;;)
int err = -1;
if(semaphore.u64[0] != 0)
{
int err = sem_post((sem_t*)semaphore.u64[0]);
if(err == 0)
{
break;
}
else
{
if(errno == EAGAIN)
{
continue;
}
}
break;
err = OS_LNX_RETRY_ON_EINTR(sem_post((sem_t*)semaphore.u64[0]));
Assert(err == 0);
}
}