Add a new timed condition variable wait API

* src/util/threads.h, src/util/threads-pthread.c,
  src/libvirt_private.syms: Add virCondWaitUntil()
This commit is contained in:
Daniel P. Berrange 2009-11-03 13:40:15 -05:00
parent 15a9144609
commit e40438fa7f
3 changed files with 17 additions and 0 deletions

View File

@ -452,6 +452,7 @@ virMutexUnlock;
virCondInit;
virCondDestroy;
virCondWait;
virCondWaitUntil;
virCondSignal;
virCondBroadcast;

View File

@ -88,6 +88,21 @@ int virCondWait(virCondPtr c, virMutexPtr m)
return 0;
}
int virCondWaitUntil(virCondPtr c, virMutexPtr m, unsigned long long whenms)
{
int ret;
struct timespec ts;
ts.tv_sec = whenms / 1000;
ts.tv_nsec = (whenms % 1000) * 1000;
if ((ret = pthread_cond_timedwait(&c->cond, &m->lock, &ts)) != 0) {
errno = ret;
return -1;
}
return 0;
}
void virCondSignal(virCondPtr c)
{
pthread_cond_signal(&c->cond);

View File

@ -49,6 +49,7 @@ int virCondInit(virCondPtr c) ATTRIBUTE_RETURN_CHECK;
int virCondDestroy(virCondPtr c) ATTRIBUTE_RETURN_CHECK;
int virCondWait(virCondPtr c, virMutexPtr m) ATTRIBUTE_RETURN_CHECK;
int virCondWaitUntil(virCondPtr c, virMutexPtr m, unsigned long long whenms) ATTRIBUTE_RETURN_CHECK;
void virCondSignal(virCondPtr c);
void virCondBroadcast(virCondPtr c);