diff --git a/libobs/util/threading-posix.c b/libobs/util/threading-posix.c index 075274865..57bf2388c 100644 --- a/libobs/util/threading-posix.c +++ b/libobs/util/threading-posix.c @@ -77,15 +77,19 @@ int os_event_wait(os_event_t *event) { int code = 0; pthread_mutex_lock(&event->mutex); - if (!event->signalled) + while (!event->signalled) { code = pthread_cond_wait(&event->cond, &event->mutex); + if (code != 0) + break; + } if (code == 0) { if (!event->manual) event->signalled = false; - pthread_mutex_unlock(&event->mutex); } + pthread_mutex_unlock(&event->mutex); + return code; } @@ -103,7 +107,7 @@ int os_event_timedwait(os_event_t *event, unsigned long milliseconds) { int code = 0; pthread_mutex_lock(&event->mutex); - if (!event->signalled) { + while (!event->signalled) { struct timespec ts; #if defined(__APPLE__) || defined(__MINGW32__) struct timeval tv; @@ -115,6 +119,8 @@ int os_event_timedwait(os_event_t *event, unsigned long milliseconds) #endif add_ms_to_ts(&ts, milliseconds); code = pthread_cond_timedwait(&event->cond, &event->mutex, &ts); + if (code != 0) + break; } if (code == 0) {