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