mirror of https://github.com/mpv-player/mpv
demux: fix deadlock on "program" property changes
Tries to recursively lock a non-recursive lock, which usually ends in a deadlock. Must have been broken by some past refactor.
This commit is contained in:
parent
4381753207
commit
fdb39f313b
|
@ -2945,6 +2945,8 @@ static void thread_demux_control(void *p)
|
|||
struct demux_internal *in = demuxer->in;
|
||||
int r = CONTROL_UNKNOWN;
|
||||
|
||||
pthread_mutex_unlock(&in->lock);
|
||||
|
||||
if (cmd == DEMUXER_CTRL_STREAM_CTRL) {
|
||||
struct demux_ctrl_stream_ctrl *c = arg;
|
||||
if (in->threading)
|
||||
|
@ -2960,6 +2962,8 @@ static void thread_demux_control(void *p)
|
|||
r = demuxer->desc->control(demuxer->in->d_thread, cmd, arg);
|
||||
}
|
||||
|
||||
pthread_mutex_lock(&in->lock);
|
||||
|
||||
*args->r = r;
|
||||
}
|
||||
|
||||
|
@ -2990,7 +2994,9 @@ int demux_control(demuxer_t *demuxer, int cmd, void *arg)
|
|||
pthread_cond_wait(&in->wakeup, &in->lock);
|
||||
pthread_mutex_unlock(&in->lock);
|
||||
} else {
|
||||
pthread_mutex_lock(&in->lock);
|
||||
thread_demux_control(&args);
|
||||
pthread_mutex_unlock(&in->lock);
|
||||
}
|
||||
|
||||
return r;
|
||||
|
|
Loading…
Reference in New Issue