From fdb39f313b1f62ea62e19a6c620a58625a329240 Mon Sep 17 00:00:00 2001 From: wm4 Date: Fri, 13 Apr 2018 22:56:49 +0200 Subject: 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. --- demux/demux.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/demux/demux.c b/demux/demux.c index 4563a034a2..23ec713276 100644 --- a/demux/demux.c +++ b/demux/demux.c @@ -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; -- cgit v1.2.3