Replace delay by deadline in timedwait()

The function sc_cond_timedwait() accepted a parameter representing the
max duration to wait, because it internally uses SDL_CondWaitTimeout().

Instead, accept a deadline, to be consistent with
pthread_cond_timedwait().
This commit is contained in:
Romain Vimont 2021-07-04 17:04:20 +02:00
parent ec871dd3f5
commit 32e692d5d2
4 changed files with 8 additions and 9 deletions

View file

@ -84,11 +84,9 @@ run_fps_counter(void *data) {
sc_tick now = sc_tick_now(); sc_tick now = sc_tick_now();
check_interval_expired(counter, now); check_interval_expired(counter, now);
assert(counter->next_timestamp > now);
sc_tick remaining = counter->next_timestamp - now;
// ignore the reason (timeout or signaled), we just loop anyway // ignore the reason (timeout or signaled), we just loop anyway
sc_cond_timedwait(&counter->state_cond, &counter->mutex, remaining); sc_cond_timedwait(&counter->state_cond, &counter->mutex,
counter->next_timestamp);
} }
} }
sc_mutex_unlock(&counter->mutex); sc_mutex_unlock(&counter->mutex);

View file

@ -557,7 +557,7 @@ server_stop(struct server *server) {
#define WATCHDOG_DELAY SC_TICK_FROM_SEC(1) #define WATCHDOG_DELAY SC_TICK_FROM_SEC(1)
signaled = sc_cond_timedwait(&server->process_terminated_cond, signaled = sc_cond_timedwait(&server->process_terminated_cond,
&server->mutex, &server->mutex,
WATCHDOG_DELAY); sc_tick_now() + WATCHDOG_DELAY);
} }
sc_mutex_unlock(&server->mutex); sc_mutex_unlock(&server->mutex);

View file

@ -123,12 +123,13 @@ sc_cond_wait(sc_cond *cond, sc_mutex *mutex) {
} }
bool bool
sc_cond_timedwait(sc_cond *cond, sc_mutex *mutex, sc_tick delay) { sc_cond_timedwait(sc_cond *cond, sc_mutex *mutex, sc_tick deadline) {
if (delay < 0) { sc_tick now = sc_tick_now();
if (deadline <= now) {
return false; // timeout return false; // timeout
} }
uint32_t ms = SC_TICK_TO_MS(delay); uint32_t ms = SC_TICK_TO_MS(deadline - now);
int r = SDL_CondWaitTimeout(cond->cond, mutex->mutex, ms); int r = SDL_CondWaitTimeout(cond->cond, mutex->mutex, ms);
#ifndef NDEBUG #ifndef NDEBUG
if (r < 0) { if (r < 0) {

View file

@ -73,7 +73,7 @@ sc_cond_wait(sc_cond *cond, sc_mutex *mutex);
// return true on signaled, false on timeout // return true on signaled, false on timeout
bool bool
sc_cond_timedwait(sc_cond *cond, sc_mutex *mutex, sc_tick ms); sc_cond_timedwait(sc_cond *cond, sc_mutex *mutex, sc_tick deadline);
void void
sc_cond_signal(sc_cond *cond); sc_cond_signal(sc_cond *cond);