summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/pbd/pbd/semutils.h2
-rw-r--r--libs/pbd/semutils.cc12
2 files changed, 14 insertions, 0 deletions
diff --git a/libs/pbd/pbd/semutils.h b/libs/pbd/pbd/semutils.h
index 6c661ab499..e81e33e533 100644
--- a/libs/pbd/pbd/semutils.h
+++ b/libs/pbd/pbd/semutils.h
@@ -55,10 +55,12 @@ class LIBPBD_API Semaphore {
int signal ();
int wait ();
+ int reset ();
#else
int signal () { return sem_post (ptr_to_sem()); }
int wait () { return sem_wait (ptr_to_sem()); }
+ int reset () { int rv = 0 ; while (sem_trywait (ptr_to_sem()) == 0) ++rv; return rv; }
#endif
};
diff --git a/libs/pbd/semutils.cc b/libs/pbd/semutils.cc
index 7f31d30faf..496eaf4d91 100644
--- a/libs/pbd/semutils.cc
+++ b/libs/pbd/semutils.cc
@@ -74,4 +74,16 @@ Semaphore::wait ()
return (result == WAIT_OBJECT_0);
}
+int
+Semaphore::reset ()
+{
+ int rv = -1;
+ DWORD result;
+ do {
+ ++rv;
+ result = WaitForSingleObject(_sem, 0);
+ } while (result == WAIT_OBJECT_0);
+ return rv;
+}
+
#endif