comparison src/os/bsd/vm/os_bsd.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
2352 } 2352 }
2353 return NULL; 2353 return NULL;
2354 } 2354 }
2355 2355
2356 // The memory is committed 2356 // The memory is committed
2357 address pc = CALLER_PC; 2357 MemTracker::record_virtual_memory_reserve_and_commit((address)addr, bytes, mtNone, CALLER_PC);
2358 MemTracker::record_virtual_memory_reserve((address)addr, bytes, pc);
2359 MemTracker::record_virtual_memory_commit((address)addr, bytes, pc);
2360 2358
2361 return addr; 2359 return addr;
2362 } 2360 }
2363 2361
2364 bool os::release_memory_special(char* base, size_t bytes) { 2362 bool os::release_memory_special(char* base, size_t bytes) {
2363 MemTracker::Tracker tkr = MemTracker::get_virtual_memory_release_tracker();
2365 // detaching the SHM segment will also delete it, see reserve_memory_special() 2364 // detaching the SHM segment will also delete it, see reserve_memory_special()
2366 int rslt = shmdt(base); 2365 int rslt = shmdt(base);
2367 if (rslt == 0) { 2366 if (rslt == 0) {
2368 MemTracker::record_virtual_memory_uncommit((address)base, bytes); 2367 tkr.record((address)base, bytes);
2369 MemTracker::record_virtual_memory_release((address)base, bytes);
2370 return true; 2368 return true;
2371 } else { 2369 } else {
2370 tkr.discard();
2372 return false; 2371 return false;
2373 } 2372 }
2374 2373
2375 } 2374 }
2376 2375