[libvirt] [PATCH 03/15] Add a new timed condition variable wait API
Daniel Veillard
veillard at redhat.com
Wed Nov 4 11:02:40 UTC 2009
On Tue, Nov 03, 2009 at 02:49:57PM -0500, Daniel P. Berrange wrote:
> * src/util/threads.h, src/util/threads-pthread.c,
> src/libvirt_private.syms: Add virCondWaitUntil()
> ---
> src/libvirt_private.syms | 1 +
> src/util/threads-pthread.c | 15 +++++++++++++++
> src/util/threads.h | 1 +
> 3 files changed, 17 insertions(+), 0 deletions(-)
>
> diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
> index 1e4a3dd..600dfee 100644
> --- a/src/libvirt_private.syms
> +++ b/src/libvirt_private.syms
> @@ -443,6 +443,7 @@ virMutexUnlock;
> virCondInit;
> virCondDestroy;
> virCondWait;
> +virCondWaitUntil;
> virCondSignal;
> virCondBroadcast;
>
> diff --git a/src/util/threads-pthread.c b/src/util/threads-pthread.c
> index b3ec06e..ad42483 100644
> --- a/src/util/threads-pthread.c
> +++ b/src/util/threads-pthread.c
> @@ -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);
> diff --git a/src/util/threads.h b/src/util/threads.h
> index 62239b7..d97463d 100644
> --- a/src/util/threads.h
> +++ b/src/util/threads.h
> @@ -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);
>
Haha, now I understand the slight change and why it's the thread
waiting which gets to timeout, simpler, and probably as practical
ACK
Daniel
--
Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/
daniel at veillard.com | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library http://libvirt.org/
More information about the libvir-list
mailing list