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:
parent
ec871dd3f5
commit
32e692d5d2
4 changed files with 8 additions and 9 deletions
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in a new issue