diff options
-rw-r--r-- | demux/demux.c | 6 |
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; |