提交 7ce30ece 编写于 作者: J jpark37

libobs/util: Fix POSIX event bugs

Handle spurious wakeups, and ensure mutex unlock.
上级 cc39efc6
......@@ -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) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册