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;