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