summaryrefslogtreecommitdiff
path: root/chromium/third_party/libvpx/source/libvpx/vpx_util/vpx_thread.h
diff options
context:
space:
mode:
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.h22
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