From 10584159df2c27998b2178ec32e707f2e167ed12 Mon Sep 17 00:00:00 2001 From: wm4 Date: Tue, 17 Apr 2018 18:29:32 +0200 Subject: w32_common: avoid recursive dispatch queue calls I suppose this doesn't matter in practice, i.e. even if calls relayed over the dispatch queue will cause WndProc to be invoked, WndProc will never run for a longer time. Preparation for removing recursion support from the dispatch queue code. --- video/out/w32_common.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/video/out/w32_common.c b/video/out/w32_common.c index feeae81462..de81b35dca 100644 --- a/video/out/w32_common.c +++ b/video/out/w32_common.c @@ -79,6 +79,7 @@ struct vo_w32_state { pthread_t thread; bool terminate; struct mp_dispatch_queue *dispatch; // used to run stuff on the GUI thread + bool in_dispatch; struct w32_api api; // stores functions from dynamically loaded DLLs @@ -920,7 +921,11 @@ static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, // The dispatch queue should be processed as soon as possible to prevent // playback glitches, since it is likely blocking the VO thread - mp_dispatch_queue_process(w32->dispatch, 0); + if (!w32->in_dispatch) { + w32->in_dispatch = true; + mp_dispatch_queue_process(w32->dispatch, 0); + w32->in_dispatch = false; + } switch (message) { case WM_ERASEBKGND: // no need to erase background separately -- cgit v1.2.3