]> xenbits.xensource.com Git - libvirt.git/commitdiff
Add a new timed condition variable wait API
authorDaniel P. Berrange <berrange@redhat.com>
Tue, 3 Nov 2009 18:40:15 +0000 (13:40 -0500)
committerDaniel P. Berrange <berrange@redhat.com>
Tue, 10 Nov 2009 11:59:17 +0000 (11:59 +0000)
* src/util/threads.h, src/util/threads-pthread.c,
  src/libvirt_private.syms: Add virCondWaitUntil()

src/libvirt_private.syms
src/util/threads-pthread.c
src/util/threads.h

index f5e5518e4e51a74ef9577534bdec5ef58272276a..b360e7126f775e4c41a570306fee5f44abbf2d35 100644 (file)
@@ -452,6 +452,7 @@ virMutexUnlock;
 virCondInit;
 virCondDestroy;
 virCondWait;
+virCondWaitUntil;
 virCondSignal;
 virCondBroadcast;
 
index b3ec06ea2ec9e3b8d9f724f3d4b88a50bd9b1371..ad42483c1d9bbc9f67d2a6642bb833cee538e49b 100644 (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);
index 62239b711dec424b37ef0efe94c2573f8d720aea..d97463d624845bb4eb2c6c5378f581b57edc689b 100644 (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);