comparison src/os/solaris/vm/os_solaris.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 5cd2fac2ae70
children 15401203db6b
comparison
equal deleted inserted replaced
8710:9058789475af 8711:6b803ba47588
3418 return NULL; 3418 return NULL;
3419 } 3419 }
3420 if ((retAddr != NULL) && UseNUMAInterleaving) { 3420 if ((retAddr != NULL) && UseNUMAInterleaving) {
3421 numa_make_global(retAddr, size); 3421 numa_make_global(retAddr, size);
3422 } 3422 }
3423
3424 // The memory is committed
3425 address pc = CALLER_PC;
3426 MemTracker::record_virtual_memory_reserve((address)retAddr, size, pc);
3427 MemTracker::record_virtual_memory_commit((address)retAddr, size, pc);
3428
3423 return retAddr; 3429 return retAddr;
3424 } 3430 }
3425 3431
3426 bool os::release_memory_special(char* base, size_t bytes) { 3432 bool os::release_memory_special(char* base, size_t bytes) {
3427 // detaching the SHM segment will also delete it, see reserve_memory_special() 3433 // detaching the SHM segment will also delete it, see reserve_memory_special()
3428 int rslt = shmdt(base); 3434 int rslt = shmdt(base);
3429 return rslt == 0; 3435 if (rslt == 0) {
3436 MemTracker::record_virtual_memory_uncommit((address)base, bytes);
3437 MemTracker::record_virtual_memory_release((address)base, bytes);
3438 return true;
3439 } else {
3440 return false;
3441 }
3430 } 3442 }
3431 3443
3432 size_t os::large_page_size() { 3444 size_t os::large_page_size() {
3433 return _large_page_size; 3445 return _large_page_size;
3434 } 3446 }