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
|
||||
semaphore_take(Semaphore semaphore, U64 endt_us)
|
||||
{
|
||||
// TODO(rjf): we need to use `sem_timedwait` here.
|
||||
AssertAlways(endt_us == max_U64);
|
||||
for(;;)
|
||||
{
|
||||
int err = sem_wait((sem_t*)semaphore.u64[0]);
|
||||
if(err == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
else if(errno == EAGAIN)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return 1;
|
||||
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));
|
||||
return err == 0;
|
||||
}
|
||||
|
||||
internal void
|
||||
|
||||
Reference in New Issue
Block a user