From 4395a4f83709a538538cee9d14de522c024b1713 Mon Sep 17 00:00:00 2001 From: wm4 Date: Fri, 16 Sep 2016 20:24:52 +0200 Subject: [PATCH] player: don't enter playloop for client API requests This _actually_ does what commit 8716c2e8 promised, and gives a slight performance improvement for client API users which make a lot of requests (like reading properties). The main issue was that mp_dispatch_lock() (which client.c uses to get exclusive access to the core) still called the wakeup callback, which made mp_dispatch_queue_process() exit. So the playloop got executed again, and since it does a lot of stuff, performance could be reduced. --- misc/dispatch.c | 4 ++++ player/main.c | 2 -- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/misc/dispatch.c b/misc/dispatch.c index 40729d9e8d..086896ba79 100644 --- a/misc/dispatch.c +++ b/misc/dispatch.c @@ -122,6 +122,10 @@ static void mp_dispatch_append(struct mp_dispatch_queue *queue, // Wake up the main thread; note that other threads might wait on this // condition for reasons, so broadcast the condition. pthread_cond_broadcast(&queue->cond); + // No wakeup callback -> assume mp_dispatch_queue_process() needs to be + // interrupted instead. + if (!queue->wakeup_fn) + queue->interrupted = true; pthread_mutex_unlock(&queue->lock); if (queue->wakeup_fn) queue->wakeup_fn(queue->wakeup_ctx); diff --git a/player/main.c b/player/main.c index a6e82287d7..76300162f3 100644 --- a/player/main.c +++ b/player/main.c @@ -182,7 +182,6 @@ void mp_destroy(struct MPContext *mpctx) cas_terminal_owner(mpctx, NULL); } - mp_dispatch_set_wakeup_fn(mpctx->dispatch, NULL, NULL); mp_input_uninit(mpctx->input); uninit_libav(mpctx->global); @@ -356,7 +355,6 @@ struct MPContext *mp_create(void) #endif mp_input_set_cancel(mpctx->input, mpctx->playback_abort); - mp_dispatch_set_wakeup_fn(mpctx->dispatch, wakeup_playloop, mpctx); return mpctx; }