winmm: Fix fd leak on restarting timer.

This commit is contained in:
Maarten Lankhorst 2010-08-10 16:04:24 +02:00 committed by Alexandre Julliard
parent 201c26530d
commit 6910b0f143
1 changed files with 7 additions and 4 deletions

View File

@ -243,16 +243,19 @@ static DWORD CALLBACK TIME_MMSysTimeThread(LPVOID arg)
static void TIME_MMTimeStart(void) static void TIME_MMTimeStart(void)
{ {
TIME_TimeToDie = 0; TIME_TimeToDie = 0;
if (!TIME_hMMTimer) {
HMODULE mod; if (TIME_fdWake[0] < 0) {
if (pipe(TIME_fdWake) < 0) if (pipe(TIME_fdWake) < 0) {
{
TIME_fdWake[0] = TIME_fdWake[1] = -1; TIME_fdWake[0] = TIME_fdWake[1] = -1;
ERR("Cannot create pipe: %s\n", strerror(errno)); ERR("Cannot create pipe: %s\n", strerror(errno));
} else { } else {
fcntl(TIME_fdWake[0], F_SETFL, O_NONBLOCK); fcntl(TIME_fdWake[0], F_SETFL, O_NONBLOCK);
fcntl(TIME_fdWake[1], 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); GetModuleHandleExW(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPCWSTR)TIME_MMSysTimeThread, &mod);
TIME_hMMTimer = CreateThread(NULL, 0, TIME_MMSysTimeThread, mod, 0, NULL); TIME_hMMTimer = CreateThread(NULL, 0, TIME_MMSysTimeThread, mod, 0, NULL);
SetThreadPriority(TIME_hMMTimer, THREAD_PRIORITY_TIME_CRITICAL); SetThreadPriority(TIME_hMMTimer, THREAD_PRIORITY_TIME_CRITICAL);