pthread_cond_timedwait() requires CLOCK_REALTIME :/

pull/274/head
nick black 5 years ago committed by Nick Black
parent f8c870bb76
commit 38fb082c61

@ -19,8 +19,10 @@ char32_t demo_getc(const struct timespec* ts, ncinput* ni){
struct timespec now;
uint64_t ns;
struct timespec abstime;
// yes, i'd like CLOCK_MONOTONIC too, but pthread_cond_timedwait() is based off
// of crappy CLOCK_REALTIME :/
if(ts){
clock_gettime(CLOCK_MONOTONIC, &now);
clock_gettime(CLOCK_REALTIME, &now);
ns = timespec_to_ns(&now) + timespec_to_ns(ts);
ns_to_timespec(ns, &abstime);
}else{
@ -29,7 +31,7 @@ char32_t demo_getc(const struct timespec* ts, ncinput* ni){
}
pthread_mutex_lock(&lock);
while(!queue){
clock_gettime(CLOCK_MONOTONIC, &now);
clock_gettime(CLOCK_REALTIME, &now);
if(timespec_to_ns(&now) > timespec_to_ns(&abstime)){
pthread_mutex_unlock(&lock);
return 0;
@ -52,11 +54,14 @@ char32_t demo_getc(const struct timespec* ts, ncinput* ni){
static int
pass_along(const ncinput* ni){
pthread_mutex_lock(&lock);
nciqueue *nq = malloc(sizeof(*nq));
memcpy(&nq->ni, ni, sizeof(*ni));
nq->next = NULL;
*enqueue = nq;
enqueue = &nq->next;
pthread_mutex_unlock(&lock);
pthread_cond_signal(&cond);
return 0;
}

Loading…
Cancel
Save