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;
|
virCondInit;
|
||||||
virCondDestroy;
|
virCondDestroy;
|
||||||
virCondWait;
|
virCondWait;
|
||||||
|
virCondWaitUntil;
|
||||||
virCondSignal;
|
virCondSignal;
|
||||||
virCondBroadcast;
|
virCondBroadcast;
|
||||||
|
|
||||||
|
@ -88,6 +88,21 @@ int virCondWait(virCondPtr c, virMutexPtr m)
|
|||||||
return 0;
|
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)
|
void virCondSignal(virCondPtr c)
|
||||||
{
|
{
|
||||||
pthread_cond_signal(&c->cond);
|
pthread_cond_signal(&c->cond);
|
||||||
|
@ -49,6 +49,7 @@ int virCondInit(virCondPtr c) ATTRIBUTE_RETURN_CHECK;
|
|||||||
int virCondDestroy(virCondPtr c) ATTRIBUTE_RETURN_CHECK;
|
int virCondDestroy(virCondPtr c) ATTRIBUTE_RETURN_CHECK;
|
||||||
|
|
||||||
int virCondWait(virCondPtr c, virMutexPtr m) 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 virCondSignal(virCondPtr c);
|
||||||
void virCondBroadcast(virCondPtr c);
|
void virCondBroadcast(virCondPtr c);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user