Signed-off-by: Zebediah Figura z.figura12@gmail.com
On 1/2/20 7:07 AM, Gabriel Ivăncescu wrote:
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@gmail.com
As I seem to understand, this code is supposed to get the minimum timeout of all the sinks in the list, but only for that specific iteration, not globally.
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 77e569d..8122cc5 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;