Mercurial > hg > graal-compiler
comparison src/os/linux/vm/os_linux.cpp @ 10986:1f4355cee9a2
8013651: NMT: reserve/release sequence id's in incorrect order due to race
Summary: Fixed NMT race condition for realloc, uncommit and release
Reviewed-by: coleenp, ccheung
author | zgu |
---|---|
date | Tue, 18 Jun 2013 08:44:08 -0400 |
parents | a837fa3d3f86 |
children | 59b052799158 f4f6ae481e1a |
comparison
equal
deleted
inserted
replaced
10984:cd2118b62475 | 10986:1f4355cee9a2 |
---|---|
3361 if ((addr != NULL) && UseNUMAInterleaving) { | 3361 if ((addr != NULL) && UseNUMAInterleaving) { |
3362 numa_make_global(addr, bytes); | 3362 numa_make_global(addr, bytes); |
3363 } | 3363 } |
3364 | 3364 |
3365 // The memory is committed | 3365 // The memory is committed |
3366 address pc = CALLER_PC; | 3366 MemTracker::record_virtual_memory_reserve_and_commit((address)addr, bytes, mtNone, CALLER_PC); |
3367 MemTracker::record_virtual_memory_reserve((address)addr, bytes, pc); | |
3368 MemTracker::record_virtual_memory_commit((address)addr, bytes, pc); | |
3369 | 3367 |
3370 return addr; | 3368 return addr; |
3371 } | 3369 } |
3372 | 3370 |
3373 bool os::release_memory_special(char* base, size_t bytes) { | 3371 bool os::release_memory_special(char* base, size_t bytes) { |
3372 MemTracker::Tracker tkr = MemTracker::get_virtual_memory_release_tracker(); | |
3374 // detaching the SHM segment will also delete it, see reserve_memory_special() | 3373 // detaching the SHM segment will also delete it, see reserve_memory_special() |
3375 int rslt = shmdt(base); | 3374 int rslt = shmdt(base); |
3376 if (rslt == 0) { | 3375 if (rslt == 0) { |
3377 MemTracker::record_virtual_memory_uncommit((address)base, bytes); | 3376 tkr.record((address)base, bytes); |
3378 MemTracker::record_virtual_memory_release((address)base, bytes); | |
3379 return true; | 3377 return true; |
3380 } else { | 3378 } else { |
3381 return false; | 3379 tkr.discard(); |
3380 return false; | |
3382 } | 3381 } |
3383 } | 3382 } |
3384 | 3383 |
3385 size_t os::large_page_size() { | 3384 size_t os::large_page_size() { |
3386 return _large_page_size; | 3385 return _large_page_size; |