diff options
Diffstat (limited to 'third_party/aom/aom_util/aom_thread.h')
-rw-r--r-- | third_party/aom/aom_util/aom_thread.h | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/third_party/aom/aom_util/aom_thread.h b/third_party/aom/aom_util/aom_thread.h index 0ae8f2f49..3b22ac70c 100644 --- a/third_party/aom/aom_util/aom_thread.h +++ b/third_party/aom/aom_util/aom_thread.h @@ -17,7 +17,7 @@ #ifndef AOM_THREAD_H_ #define AOM_THREAD_H_ -#include "./aom_config.h" +#include "config/aom_config.h" #ifdef __cplusplus extern "C" { @@ -173,6 +173,23 @@ static INLINE int pthread_cond_signal(pthread_cond_t *const condition) { return !ok; } +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_wait(pthread_cond_t *const condition, pthread_mutex_t *const mutex) { int ok; |