mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
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:
parent
15a9144609
commit
e40438fa7f
@ -452,6 +452,7 @@ virMutexUnlock;
|
||||
virCondInit;
|
||||
virCondDestroy;
|
||||
virCondWait;
|
||||
virCondWaitUntil;
|
||||
virCondSignal;
|
||||
virCondBroadcast;
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user