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:
wm4 2018-04-13 22:56:49 +02:00 committed by Jan Ekström
parent 4381753207
commit fdb39f313b
1 changed files with 6 additions and 0 deletions

View File

@ -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;