Mercurial > hg > graal-jvmci-8
comparison src/os/linux/vm/os_linux.cpp @ 8711:6b803ba47588
8008257: NMT: assert(new_rec->is_allocation_record()) failed when running with shared memory option
Summary: Corrected virtual memory recording and tagging code when large pages are used
Reviewed-by: coleenp, ccheung
author | zgu |
---|---|
date | Thu, 07 Mar 2013 14:06:44 -0500 |
parents | 9058789475af |
children | 14509df4cd63 754c24457b20 |
comparison
equal
deleted
inserted
replaced
8710:9058789475af | 8711:6b803ba47588 |
---|---|
56 #include "runtime/stubRoutines.hpp" | 56 #include "runtime/stubRoutines.hpp" |
57 #include "runtime/thread.inline.hpp" | 57 #include "runtime/thread.inline.hpp" |
58 #include "runtime/threadCritical.hpp" | 58 #include "runtime/threadCritical.hpp" |
59 #include "runtime/timer.hpp" | 59 #include "runtime/timer.hpp" |
60 #include "services/attachListener.hpp" | 60 #include "services/attachListener.hpp" |
61 #include "services/memTracker.hpp" | |
61 #include "services/runtimeService.hpp" | 62 #include "services/runtimeService.hpp" |
62 #include "utilities/decoder.hpp" | 63 #include "utilities/decoder.hpp" |
63 #include "utilities/defaultStream.hpp" | 64 #include "utilities/defaultStream.hpp" |
64 #include "utilities/events.hpp" | 65 #include "utilities/events.hpp" |
65 #include "utilities/elfFile.hpp" | 66 #include "utilities/elfFile.hpp" |
3210 | 3211 |
3211 if ((addr != NULL) && UseNUMAInterleaving) { | 3212 if ((addr != NULL) && UseNUMAInterleaving) { |
3212 numa_make_global(addr, bytes); | 3213 numa_make_global(addr, bytes); |
3213 } | 3214 } |
3214 | 3215 |
3216 // The memory is committed | |
3217 address pc = CALLER_PC; | |
3218 MemTracker::record_virtual_memory_reserve((address)addr, bytes, pc); | |
3219 MemTracker::record_virtual_memory_commit((address)addr, bytes, pc); | |
3220 | |
3215 return addr; | 3221 return addr; |
3216 } | 3222 } |
3217 | 3223 |
3218 bool os::release_memory_special(char* base, size_t bytes) { | 3224 bool os::release_memory_special(char* base, size_t bytes) { |
3219 // detaching the SHM segment will also delete it, see reserve_memory_special() | 3225 // detaching the SHM segment will also delete it, see reserve_memory_special() |
3220 int rslt = shmdt(base); | 3226 int rslt = shmdt(base); |
3221 return rslt == 0; | 3227 if (rslt == 0) { |
3228 MemTracker::record_virtual_memory_uncommit((address)base, bytes); | |
3229 MemTracker::record_virtual_memory_release((address)base, bytes); | |
3230 return true; | |
3231 } else { | |
3232 return false; | |
3233 } | |
3222 } | 3234 } |
3223 | 3235 |
3224 size_t os::large_page_size() { | 3236 size_t os::large_page_size() { |
3225 return _large_page_size; | 3237 return _large_page_size; |
3226 } | 3238 } |