7033100: CreateMinidumpOnCrash does not work for failed asserts
Summary: Passing NULL as MINIDUMP_EXCEPTION_INFORMATION when calling MiniDumpWriteDump when crash is due to assertion instead of real exception to avoid creating zero-length mini dump file.
Reviewed-by: acorn, dcubed, poonam, coleenp
--- a/hotspot/src/os/windows/vm/os_windows.cpp Tue Apr 12 14:18:53 2011 -0700
+++ b/hotspot/src/os/windows/vm/os_windows.cpp Thu Apr 14 11:50:36 2011 -0400
@@ -921,6 +921,8 @@
HINSTANCE dbghelp;
EXCEPTION_POINTERS ep;
MINIDUMP_EXCEPTION_INFORMATION mei;
+ MINIDUMP_EXCEPTION_INFORMATION* pmei;
+
HANDLE hProcess = GetCurrentProcess();
DWORD processId = GetCurrentProcessId();
HANDLE dumpFile;
@@ -971,17 +973,22 @@
VMError::report_coredump_status("Failed to create file for dumping", false);
return;
}
-
- ep.ContextRecord = (PCONTEXT) contextRecord;
- ep.ExceptionRecord = (PEXCEPTION_RECORD) exceptionRecord;
-
- mei.ThreadId = GetCurrentThreadId();
- mei.ExceptionPointers = &ep;
+ if (exceptionRecord != NULL && contextRecord != NULL) {
+ ep.ContextRecord = (PCONTEXT) contextRecord;
+ ep.ExceptionRecord = (PEXCEPTION_RECORD) exceptionRecord;
+
+ mei.ThreadId = GetCurrentThreadId();
+ mei.ExceptionPointers = &ep;
+ pmei = &mei;
+ } else {
+ pmei = NULL;
+ }
+
// Older versions of dbghelp.dll (the one shipped with Win2003 for example) may not support all
// the dump types we really want. If first call fails, lets fall back to just use MiniDumpWithFullMemory then.
- if (_MiniDumpWriteDump(hProcess, processId, dumpFile, dumpType, &mei, NULL, NULL) == false &&
- _MiniDumpWriteDump(hProcess, processId, dumpFile, (MINIDUMP_TYPE)MiniDumpWithFullMemory, &mei, NULL, NULL) == false) {
+ if (_MiniDumpWriteDump(hProcess, processId, dumpFile, dumpType, pmei, NULL, NULL) == false &&
+ _MiniDumpWriteDump(hProcess, processId, dumpFile, (MINIDUMP_TYPE)MiniDumpWithFullMemory, pmei, NULL, NULL) == false) {
VMError::report_coredump_status("Call to MiniDumpWriteDump() failed", false);
} else {
VMError::report_coredump_status(buffer, true);