--- a/hotspot/src/os/windows/vm/os_windows.cpp Tue Aug 05 14:18:44 2014 +0000
+++ b/hotspot/src/os/windows/vm/os_windows.cpp Thu Aug 07 12:18:58 2014 -0700
@@ -138,9 +138,8 @@
// Workaround for issue when a custom launcher doesn't call
// DestroyJavaVM and NMT is trying to track memory when free is
// called from a static destructor
- if (MemTracker::is_on()) {
- MemTracker::shutdown(MemTracker::NMT_normal);
- }
+ MemTracker::shutdown();
+
break;
default:
break;
@@ -163,6 +162,10 @@
return result > 0 && result < len;
}
+bool os::unsetenv(const char* name) {
+ assert(name != NULL, "Null pointer");
+ return (SetEnvironmentVariable(name, NULL) == TRUE);
+}
// No setuid programs under Windows.
bool os::have_special_privileges() {
@@ -319,15 +322,16 @@
* So far, this method is only used by Native Memory Tracking, which is
* only supported on Windows XP or later.
*/
-address os::get_caller_pc(int n) {
+int os::get_native_stack(address* stack, int frames, int toSkip) {
#ifdef _NMT_NOINLINE_
- n++;
+ toSkip ++;
#endif
- address pc;
- if (os::Kernel32Dll::RtlCaptureStackBackTrace(n + 1, 1, (PVOID*)&pc, NULL) == 1) {
- return pc;
- }
- return NULL;
+ int captured = Kernel32Dll::RtlCaptureStackBackTrace(toSkip + 1, frames,
+ (PVOID*)stack, NULL);
+ for (int index = captured; index < frames; index ++) {
+ stack[index] = NULL;
+ }
+ return captured;
}
@@ -2901,7 +2905,7 @@
PAGE_READWRITE);
// If reservation failed, return NULL
if (p_buf == NULL) return NULL;
- MemTracker::record_virtual_memory_reserve((address)p_buf, size_of_reserve, mtNone, CALLER_PC);
+ MemTracker::record_virtual_memory_reserve((address)p_buf, size_of_reserve, CALLER_PC);
os::release_memory(p_buf, bytes + chunk_size);
// we still need to round up to a page boundary (in case we are using large pages)
@@ -2967,7 +2971,7 @@
// need to create a dummy 'reserve' record to match
// the release.
MemTracker::record_virtual_memory_reserve((address)p_buf,
- bytes_to_release, mtNone, CALLER_PC);
+ bytes_to_release, CALLER_PC);
os::release_memory(p_buf, bytes_to_release);
}
#ifdef ASSERT
@@ -2986,11 +2990,10 @@
}
// Although the memory is allocated individually, it is returned as one.
// NMT records it as one block.
- address pc = CALLER_PC;
if ((flags & MEM_COMMIT) != 0) {
- MemTracker::record_virtual_memory_reserve_and_commit((address)p_buf, bytes, mtNone, pc);
+ MemTracker::record_virtual_memory_reserve_and_commit((address)p_buf, bytes, CALLER_PC);
} else {
- MemTracker::record_virtual_memory_reserve((address)p_buf, bytes, mtNone, pc);
+ MemTracker::record_virtual_memory_reserve((address)p_buf, bytes, CALLER_PC);
}
// made it this far, success
@@ -3188,8 +3191,7 @@
DWORD flag = MEM_RESERVE | MEM_COMMIT | MEM_LARGE_PAGES;
char * res = (char *)VirtualAlloc(addr, bytes, flag, prot);
if (res != NULL) {
- address pc = CALLER_PC;
- MemTracker::record_virtual_memory_reserve_and_commit((address)res, bytes, mtNone, pc);
+ MemTracker::record_virtual_memory_reserve_and_commit((address)res, bytes, CALLER_PC);
}
return res;