mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-14 17:28:07 +00:00
implement semaphore take with timeout
This commit is contained in:
committed by
Ryan Fleury
parent
cb190ff9e3
commit
55172718c9
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user