[PATCH] kernel32/tests: Fix a race condition in test_QueryInformationJobObject().

Francois Gouget fgouget at codeweavers.com
Sun Mar 22 08:19:26 CDT 2020


The process must still be running for AssignProcessToJobObject() to
succeed.

Signed-off-by: Francois Gouget <fgouget at codeweavers.com>
---
 dlls/kernel32/tests/process.c | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/dlls/kernel32/tests/process.c b/dlls/kernel32/tests/process.c
index e54c43ca942..1889939fff3 100644
--- a/dlls/kernel32/tests/process.c
+++ b/dlls/kernel32/tests/process.c
@@ -2572,21 +2572,26 @@ static void test_QueryInformationJobObject(void)
     PJOBOBJECT_BASIC_PROCESS_ID_LIST pid_list = (JOBOBJECT_BASIC_PROCESS_ID_LIST *)buf;
     JOBOBJECT_EXTENDED_LIMIT_INFORMATION ext_limit_info;
     JOBOBJECT_BASIC_LIMIT_INFORMATION *basic_limit_info = &ext_limit_info.BasicLimitInformation;
-    DWORD dwret, ret_len;
+    DWORD ret_len;
     PROCESS_INFORMATION pi[2];
-    HANDLE job;
+    char buffer[50];
+    HANDLE job, sem;
     BOOL ret;
 
     job = pCreateJobObjectW(NULL, NULL);
     ok(job != NULL, "CreateJobObject error %u\n", GetLastError());
 
     /* Only active processes are returned */
-    create_process("exit", &pi[0]);
+    sprintf(buffer, "sync kernel32-process-%x", GetCurrentProcessId());
+    sem = CreateSemaphoreA(NULL, 0, 1, buffer + 5);
+    ok(sem != NULL, "CreateSemaphoreA failed le=%u\n", GetLastError());
+    create_process(buffer, &pi[0]);
+
     ret = pAssignProcessToJobObject(job, pi[0].hProcess);
     ok(ret, "AssignProcessToJobObject error %u\n", GetLastError());
-    dwret = WaitForSingleObject(pi[0].hProcess, 1000);
-    ok(dwret == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", dwret);
 
+    ReleaseSemaphore(sem, 1, NULL);
+    wait_child_process(pi[0].hProcess);
     CloseHandle(pi[0].hProcess);
     CloseHandle(pi[0].hThread);
 
-- 
2.20.1




More information about the wine-devel mailing list