[PATCH 2/2] kernel32/tests: Close all handles on process exit.
Zebediah Figura
z.figura12 at gmail.com
Thu Nov 16 21:42:38 CST 2017
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
Not only were we leaking handles, we previously closed the stop_event
handle immediately after setting it, so mutex_thread_proc would sometimes
loop forever trying to wait on an invalid handle, causing an intermittent
failure both on Wine and on Windows. This patch fixes that failure.
dlls/kernel32/tests/loader.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/dlls/kernel32/tests/loader.c b/dlls/kernel32/tests/loader.c
index 6d532eb..da24c80 100644
--- a/dlls/kernel32/tests/loader.c
+++ b/dlls/kernel32/tests/loader.c
@@ -1752,6 +1752,10 @@ static BOOL WINAPI dll_entry_point(HINSTANCE hinst, DWORD reason, LPVOID param)
ret = WaitForSingleObject(semaphore, 0);
ok(ret == WAIT_TIMEOUT, "expected WAIT_TIMEOUT, got %#x\n", ret);
+ CloseHandle(event);
+ CloseHandle(mutex);
+ CloseHandle(semaphore);
+
if (expected_code == STILL_ACTIVE)
{
ret = WaitForSingleObject(attached_thread[0], 0);
@@ -2149,7 +2153,6 @@ static void child_process(const char *dll_name, DWORD target_offset)
case 3:
trace("signalling thread exit\n");
SetEvent(stop_event);
- CloseHandle(stop_event);
break;
case 4:
@@ -2237,6 +2240,15 @@ static void child_process(const char *dll_name, DWORD target_offset)
*child_failures = winetest_get_failures();
+ CloseHandle(loader_lock_event);
+ CloseHandle(peb_lock_event);
+ CloseHandle(heap_lock_event);
+ CloseHandle(ack_event);
+ CloseHandle(stop_event);
+ CloseHandle(process);
+ /* Don't close event, mutex and semaphore here; we want to test if they are
+ * abandoned on process termination. */
+
trace("call ExitProcess(195)\n");
ExitProcess(195);
}
--
2.7.4
More information about the wine-devel
mailing list