From 14435a6d31377bb8a5d190a93eb22be66080f9d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Iv=C4=83ncescu?= Date: Thu, 2 Jan 2020 15:07:44 +0200 Subject: [PATCH] quartz: Reset the advise thread's timeout on each iteration. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes a regression introduced by 63a6b308e91232dd55dd107595a6181c70180dd4. Because the timeout value was always shrinked, it quickly went to 0 and then the entire advise thread used 100% of a CPU core in applications such as Media Player Classic by basically becoming a busy loop. Signed-off-by: Gabriel Ivăncescu Signed-off-by: Zebediah Figura Signed-off-by: Alexandre Julliard --- dlls/quartz/systemclock.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dlls/quartz/systemclock.c b/dlls/quartz/systemclock.c index 77e569d4372..8122cc5b0bc 100644 --- a/dlls/quartz/systemclock.c +++ b/dlls/quartz/systemclock.c @@ -126,13 +126,14 @@ static DWORD WINAPI SystemClockAdviseThread(void *param) struct system_clock *clock = param; struct advise_sink *sink, *cursor; REFERENCE_TIME current_time; - DWORD timeout = INFINITE; HANDLE handles[2] = {clock->stop_event, clock->notify_event}; TRACE("Starting advise thread for clock %p.\n", clock); for (;;) { + DWORD timeout = INFINITE; + EnterCriticalSection(&clock->cs); current_time = GetTickCount64() * 10000;