Gabriel Ivăncescu : quartz: Reset the advise thread's timeout on each iteration.
Module: wine Branch: master Commit: 14435a6d31377bb8a5d190a93eb22be66080f9d3 URL: https://source.winehq.org/git/wine.git/?a=commit;h=14435a6d31377bb8a5d190a93... Author: Gabriel Ivăncescu <gabrielopcode(a)gmail.com> Date: Thu Jan 2 15:07:44 2020 +0200 quartz: Reset the advise thread's timeout on each iteration. 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 <gabrielopcode(a)gmail.com> Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- 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 77e569d437..8122cc5b0b 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;
participants (1)
-
Alexandre Julliard