Mercurial > hg > graal-jvmci-8
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 |