8028749: java -version crashes with 'fatal error: heap walk aborted with error 1'
Summary: check_heap() should only call HeapWalk() when HeapLock() is successful.
Reviewed-by: ctornqvi, sla, dcubed
--- a/hotspot/src/os/windows/vm/os_windows.cpp Thu May 15 09:25:27 2014 -0400
+++ b/hotspot/src/os/windows/vm/os_windows.cpp Thu May 15 10:44:20 2014 -0700
@@ -5005,7 +5005,11 @@
// wrong; at these points, eax contains the address of the offending block (I think).
// To get to the exlicit error message(s) below, just continue twice.
HANDLE heap = GetProcessHeap();
- { HeapLock(heap);
+
+ // If we fail to lock the heap, then gflags.exe has been used
+ // or some other special heap flag has been set that prevents
+ // locking. We don't try to walk a heap we can't lock.
+ if (HeapLock(heap) != 0) {
PROCESS_HEAP_ENTRY phe;
phe.lpData = NULL;
while (HeapWalk(heap, &phe) != 0) {