[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