mirror of
https://github.com/mpv-player/mpv.git
synced 2024-09-20 03:52:22 +02:00
dispatch: fix a race condition triggering an assert()
If we were waiting, and then exiting due to timeout, we still have to
recheck the condition protected by the condition variable/mutex in order
to get back to a consistent state. In this case, the queue was locked
with mp_dispatch_lock(), and mp_dispatch_queue_process() got to return
without waiting for unlock.
Also caused commit 8716c2e8
. Probably an argument for replacing the
dispatch queue by a simple mutex.
This commit is contained in:
parent
ccf3458f8a
commit
17e3e800e1
@ -249,7 +249,7 @@ void mp_dispatch_queue_process(struct mp_dispatch_queue *queue, double timeout)
|
||||
} else if (wait > 0 && !queue->interrupted) {
|
||||
struct timespec ts = mp_time_us_to_timespec(wait);
|
||||
if (pthread_cond_timedwait(&queue->cond, &queue->lock, &ts))
|
||||
break;
|
||||
wait = 0;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user