From 6910b0f1439b15d73783bcd276512a517fe8fd83 Mon Sep 17 00:00:00 2001 From: Maarten Lankhorst Date: Tue, 10 Aug 2010 16:04:24 +0200 Subject: [PATCH] winmm: Fix fd leak on restarting timer. --- dlls/winmm/time.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/dlls/winmm/time.c b/dlls/winmm/time.c index e692fb6ce39..e055f6bb96b 100644 --- a/dlls/winmm/time.c +++ b/dlls/winmm/time.c @@ -243,16 +243,19 @@ static DWORD CALLBACK TIME_MMSysTimeThread(LPVOID arg) static void TIME_MMTimeStart(void) { TIME_TimeToDie = 0; - if (!TIME_hMMTimer) { - HMODULE mod; - if (pipe(TIME_fdWake) < 0) - { + + if (TIME_fdWake[0] < 0) { + if (pipe(TIME_fdWake) < 0) { TIME_fdWake[0] = TIME_fdWake[1] = -1; ERR("Cannot create pipe: %s\n", strerror(errno)); } else { fcntl(TIME_fdWake[0], F_SETFL, O_NONBLOCK); fcntl(TIME_fdWake[1], F_SETFL, O_NONBLOCK); } + } + + if (!TIME_hMMTimer) { + HMODULE mod; GetModuleHandleExW(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPCWSTR)TIME_MMSysTimeThread, &mod); TIME_hMMTimer = CreateThread(NULL, 0, TIME_MMSysTimeThread, mod, 0, NULL); SetThreadPriority(TIME_hMMTimer, THREAD_PRIORITY_TIME_CRITICAL);