Greg Geldorp : kernel32/tests: Skip some debugger tests on 64-bit.

Alexandre Julliard julliard at winehq.org
Thu Dec 30 10:49:59 CST 2010


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

Author: Greg Geldorp <ggeldorp at vmware.com>
Date:   Thu Dec 30 16:31:16 2010 +0100

kernel32/tests: Skip some debugger tests on 64-bit.

---

 dlls/kernel32/tests/debugger.c |   39 +++++++++++++++++++++++++++++++++++++--
 1 files changed, 37 insertions(+), 2 deletions(-)

diff --git a/dlls/kernel32/tests/debugger.c b/dlls/kernel32/tests/debugger.c
index 2d666ef..5c2afeb 100644
--- a/dlls/kernel32/tests/debugger.c
+++ b/dlls/kernel32/tests/debugger.c
@@ -266,6 +266,7 @@ static void doDebugger(int argc, char** argv)
 
 static void crash_and_debug(HKEY hkey, const char* argv0, const char* dbgtasks)
 {
+    static BOOL skip_crash_and_debug = FALSE;
     DWORD ret;
     HANDLE start_event, done_event;
     char* cmd;
@@ -276,6 +277,13 @@ static void crash_and_debug(HKEY hkey, const char* argv0, const char* dbgtasks)
     DWORD exit_code;
     crash_blackbox_t crash_blackbox;
     debugger_blackbox_t dbg_blackbox;
+    DWORD wait_code;
+
+    if (skip_crash_and_debug)
+    {
+        win_skip("Skipping crash_and_debug\n");
+        return;
+    }
 
     ret=RegSetValueExA(hkey, "auto", 0, REG_SZ, (BYTE*)"1", 2);
     ok(ret == ERROR_SUCCESS, "unable to set AeDebug/auto: ret=%d\n", ret);
@@ -303,7 +311,22 @@ static void crash_and_debug(HKEY hkey, const char* argv0, const char* dbgtasks)
 
     /* The process exits... */
     trace("waiting for child exit...\n");
-    ok(WaitForSingleObject(info.hProcess, 60000) == WAIT_OBJECT_0, "Timed out waiting for the child to crash\n");
+    wait_code = WaitForSingleObject(info.hProcess, 30000);
+#if defined(_WIN64) && defined(__MINGW32__)
+    /* Mingw x64 doesn't output proper unwind info */
+    skip_crash_and_debug = broken(wait_code == WAIT_TIMEOUT);
+    if (skip_crash_and_debug)
+    {
+        TerminateProcess(info.hProcess, WAIT_TIMEOUT);
+        WaitForSingleObject(info.hProcess, 5000);
+        CloseHandle(info.hProcess);
+        assert(DeleteFileA(dbglog) != 0);
+        assert(DeleteFileA(childlog) != 0);
+        win_skip("Giving up on child process\n");
+        return;
+    }
+#endif
+    ok(wait_code == WAIT_OBJECT_0, "Timed out waiting for the child to crash\n");
     ok(GetExitCodeProcess(info.hProcess, &exit_code), "GetExitCodeProcess failed: err=%d\n", GetLastError());
     if (strstr(dbgtasks, "code2"))
     {
@@ -328,7 +351,19 @@ static void crash_and_debug(HKEY hkey, const char* argv0, const char* dbgtasks)
         ok(SetEvent(start_event), "SetEvent(start_event) failed\n");
 
     trace("waiting for the debugger...\n");
-    ok(WaitForSingleObject(done_event, 60000) == WAIT_OBJECT_0, "Timed out waiting for the debugger\n");
+    wait_code = WaitForSingleObject(done_event, 5000);
+#if defined(_WIN64) && defined(__MINGW32__)
+    /* Mingw x64 doesn't output proper unwind info */
+    skip_crash_and_debug = broken(wait_code == WAIT_TIMEOUT);
+    if (skip_crash_and_debug)
+    {
+        assert(DeleteFileA(dbglog) != 0);
+        assert(DeleteFileA(childlog) != 0);
+        win_skip("Giving up on debugger\n");
+        return;
+    }
+#endif
+    ok(wait_code == WAIT_OBJECT_0, "Timed out waiting for the debugger\n");
 
     assert(load_blackbox(childlog, &crash_blackbox, sizeof(crash_blackbox)));
     assert(load_blackbox(dbglog, &dbg_blackbox, sizeof(dbg_blackbox)));




More information about the wine-cvs mailing list