mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-10 15:58:09 +00:00
null check semaphore otherwise sem_* crashes
This commit is contained in:
committed by
Ryan Fleury
parent
7c6ad4c563
commit
3da0b89ac6
+15
-18
@@ -662,36 +662,33 @@ semaphore_open(String8 name)
|
|||||||
internal void
|
internal void
|
||||||
semaphore_close(Semaphore semaphore)
|
semaphore_close(Semaphore semaphore)
|
||||||
{
|
{
|
||||||
sem_t *s = (sem_t *)semaphore.u64[0];
|
if(semaphore.u64[0] != 0)
|
||||||
sem_close(s);
|
{
|
||||||
|
sem_t *s = (sem_t *)semaphore.u64[0];
|
||||||
|
sem_close(s);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal B32
|
internal B32
|
||||||
semaphore_take(Semaphore semaphore, U64 endt_us)
|
semaphore_take(Semaphore semaphore, U64 endt_us)
|
||||||
{
|
{
|
||||||
struct timespec t = { .tv_sec = endt_us / 1000000, .tv_nsec = (endt_us % 1000000) * 1000 };
|
int err = -1;
|
||||||
int err = OS_LNX_RETRY_ON_EINTR(sem_clockwait((sem_t*)semaphore.u64[0], CLOCK_MONOTONIC, &t));
|
if(semaphore.u64[0] != 0)
|
||||||
|
{
|
||||||
|
struct timespec t = { .tv_sec = endt_us / 1000000, .tv_nsec = (endt_us % 1000000) * 1000 };
|
||||||
|
err = OS_LNX_RETRY_ON_EINTR(sem_clockwait((sem_t*)semaphore.u64[0], CLOCK_MONOTONIC, &t));
|
||||||
|
}
|
||||||
return err == 0;
|
return err == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
semaphore_drop(Semaphore semaphore)
|
semaphore_drop(Semaphore semaphore)
|
||||||
{
|
{
|
||||||
for(;;)
|
int err = -1;
|
||||||
|
if(semaphore.u64[0] != 0)
|
||||||
{
|
{
|
||||||
int err = sem_post((sem_t*)semaphore.u64[0]);
|
err = OS_LNX_RETRY_ON_EINTR(sem_post((sem_t*)semaphore.u64[0]));
|
||||||
if(err == 0)
|
Assert(err == 0);
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if(errno == EAGAIN)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user