summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2018-04-13 22:56:49 +0200
committerJan Ekström <jeebjp@gmail.com>2018-04-15 21:07:13 +0300
commitfdb39f313b1f62ea62e19a6c620a58625a329240 (patch)
treebb89583c6056469c0f1054485bdd47b104511087
parent4381753207c0af92af480a25f403bdc8737071a6 (diff)
downloadmpv-fdb39f313b1f62ea62e19a6c620a58625a329240.tar.bz2
mpv-fdb39f313b1f62ea62e19a6c620a58625a329240.tar.xz
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.
-rw-r--r--demux/demux.c6
1 files changed, 6 insertions, 0 deletions
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;