libobs/util: Fix POSIX event bugs
Handle spurious wakeups, and ensure mutex unlock.
This commit is contained in:
parent
cc39efc6a4
commit
7ce30ece82
@ -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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user