diff options
Diffstat (limited to 'chromium/third_party/libvpx/source/libvpx/vpx_util/vpx_thread.h')
-rw-r--r-- | chromium/third_party/libvpx/source/libvpx/vpx_util/vpx_thread.h | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/chromium/third_party/libvpx/source/libvpx/vpx_util/vpx_thread.h b/chromium/third_party/libvpx/source/libvpx/vpx_util/vpx_thread.h index 43a9780071f..4c20f378b07 100644 --- a/chromium/third_party/libvpx/source/libvpx/vpx_util/vpx_thread.h +++ b/chromium/third_party/libvpx/source/libvpx/vpx_util/vpx_thread.h @@ -159,6 +159,23 @@ static INLINE int pthread_cond_init(pthread_cond_t *const condition, return 0; } +static INLINE int pthread_cond_broadcast(pthread_cond_t *const condition) { + int ok = 1; +#ifdef USE_WINDOWS_CONDITION_VARIABLE + WakeAllConditionVariable(condition); +#else + while (WaitForSingleObject(condition->waiting_sem_, 0) == WAIT_OBJECT_0) { + // a thread is waiting in pthread_cond_wait: allow it to be notified + ok &= SetEvent(condition->signal_event_); + // wait until the event is consumed so the signaler cannot consume + // the event via its own pthread_cond_wait. + ok &= (WaitForSingleObject(condition->received_sem_, INFINITE) != + WAIT_OBJECT_0); + } +#endif + return !ok; +} + static INLINE int pthread_cond_signal(pthread_cond_t *const condition) { int ok = 1; #ifdef USE_WINDOWS_CONDITION_VARIABLE @@ -202,6 +219,11 @@ static INLINE int pthread_cond_wait(pthread_cond_t *const condition, #include <stdlib.h> // NOLINT #include <sys/builtin.h> // NOLINT +#if defined(__STRICT_ANSI__) +// _beginthread() is not declared on __STRICT_ANSI__ mode. Declare here. +int _beginthread(void (*)(void *), void *, unsigned, void *); +#endif + #define pthread_t TID #define pthread_mutex_t HMTX |