summaryrefslogtreecommitdiffstats
path: root/demux/demux.c
diff options
context:
space:
mode:
Diffstat (limited to 'demux/demux.c')
-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;