Greg Geldorp : shell32/tests: Fix race conditions.

Alexandre Julliard julliard at winehq.org
Tue Dec 28 10:48:20 CST 2010


Module: wine
Branch: master
Commit: 519c28894693bc2e597fc794d9114d5ccb1cd311
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=519c28894693bc2e597fc794d9114d5ccb1cd311

Author: Greg Geldorp <ggeldorp at vmware.com>
Date:   Tue Dec 28 13:34:11 2010 +0100

shell32/tests: Fix race conditions.

---

 dlls/shell32/tests/shlexec.c |   17 +++++++----------
 1 files changed, 7 insertions(+), 10 deletions(-)

diff --git a/dlls/shell32/tests/shlexec.c b/dlls/shell32/tests/shlexec.c
index c32a065..252aed7 100644
--- a/dlls/shell32/tests/shlexec.c
+++ b/dlls/shell32/tests/shlexec.c
@@ -57,6 +57,7 @@ static char tmpdir[MAX_PATH];
 static char child_file[MAX_PATH];
 static DLLVERSIONINFO dllver;
 static BOOL skip_noassoc_tests = FALSE;
+static HANDLE dde_ready_event;
 
 
 /***
@@ -572,13 +573,14 @@ static void doChild(int argc, char** argv)
 
             timer = SetTimer(NULL, 0, 2500, childTimeout);
 
-            dde_ready = CreateEvent(NULL, FALSE, FALSE, "winetest_shlexec_dde_ready");
+            dde_ready = OpenEvent(EVENT_MODIFY_STATE, FALSE, "winetest_shlexec_dde_ready");
             SetEvent(dde_ready);
             CloseHandle(dde_ready);
 
             while (GetMessage(&msg, NULL, 0, 0))
                 DispatchMessage(&msg);
 
+            Sleep(500);
             KillTimer(NULL, timer);
             assert(DdeNameService(ddeInst, hszApplication, 0L, DNS_UNREGISTER));
             assert(DdeFreeStringHandle(ddeInst, hszTopic));
@@ -587,7 +589,7 @@ static void doChild(int argc, char** argv)
         }
         else
         {
-            dde_ready = CreateEvent(NULL, FALSE, FALSE, "winetest_shlexec_dde_ready");
+            dde_ready = OpenEvent(EVENT_MODIFY_STATE, FALSE, "winetest_shlexec_dde_ready");
             SetEvent(dde_ready);
             CloseHandle(dde_ready);
         }
@@ -1613,14 +1615,7 @@ static dde_tests_t dde_tests[] =
 
 static DWORD WINAPI hooked_WaitForInputIdle(HANDLE process, DWORD timeout)
 {
-    HANDLE dde_ready;
-    DWORD wait_result;
-
-    dde_ready = CreateEventA(NULL, FALSE, FALSE, "winetest_shlexec_dde_ready");
-    wait_result = WaitForSingleObject(dde_ready, timeout);
-    CloseHandle(dde_ready);
-
-    return wait_result;
+    return WaitForSingleObject(dde_ready_event, timeout);
 }
 
 /*
@@ -1732,7 +1727,9 @@ static void test_dde(void)
         }
         ddeExec[0] = 0;
 
+        dde_ready_event = CreateEventA(NULL, FALSE, FALSE, "winetest_shlexec_dde_ready");
         rc = shell_execute_ex(SEE_MASK_FLAG_DDEWAIT | SEE_MASK_FLAG_NO_UI, NULL, filename, NULL, NULL);
+        CloseHandle(dde_ready_event);
         if ((test->todo & 0x1)==0)
         {
             ok(32 < rc, "%s failed: rc=%d err=%d\n", shell_call,




More information about the wine-cvs mailing list