mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-19 10:34:38 +02:00
8058251: assert(_count > 0) failed: Negative counter when running runtime/NMT/MallocTrackingVerify.java
Fixed an issue when overflowing the MallocSite hash table bucket Reviewed-by: coleenp, gtriantafill
This commit is contained in:
parent
d934df8a84
commit
76971f377b
8 changed files with 27 additions and 206 deletions
|
@ -72,7 +72,7 @@ void MallocHeader::release() const {
|
|||
|
||||
MallocMemorySummary::record_free(size(), flags());
|
||||
MallocMemorySummary::record_free_malloc_header(sizeof(MallocHeader));
|
||||
if (tracking_level() == NMT_detail) {
|
||||
if (MemTracker::tracking_level() == NMT_detail) {
|
||||
MallocSiteTable::deallocation_at(size(), _bucket_idx, _pos_idx);
|
||||
}
|
||||
}
|
||||
|
@ -128,36 +128,18 @@ void* MallocTracker::record_malloc(void* malloc_base, size_t size, MEMFLAGS flag
|
|||
}
|
||||
|
||||
// Uses placement global new operator to initialize malloc header
|
||||
switch(level) {
|
||||
case NMT_off:
|
||||
return malloc_base;
|
||||
case NMT_minimal: {
|
||||
MallocHeader* hdr = ::new (malloc_base) MallocHeader();
|
||||
break;
|
||||
}
|
||||
case NMT_summary: {
|
||||
assert(size <= MAX_MALLOC_SIZE, "malloc size overrun for NMT");
|
||||
header = ::new (malloc_base) MallocHeader(size, flags);
|
||||
break;
|
||||
}
|
||||
case NMT_detail: {
|
||||
assert(size <= MAX_MALLOC_SIZE, "malloc size overrun for NMT");
|
||||
header = ::new (malloc_base) MallocHeader(size, flags, stack);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
ShouldNotReachHere();
|
||||
|
||||
if (level == NMT_off) {
|
||||
return malloc_base;
|
||||
}
|
||||
|
||||
header = ::new (malloc_base)MallocHeader(size, flags, stack, level);
|
||||
memblock = (void*)((char*)malloc_base + sizeof(MallocHeader));
|
||||
|
||||
// The alignment check: 8 bytes alignment for 32 bit systems.
|
||||
// 16 bytes alignment for 64-bit systems.
|
||||
assert(((size_t)memblock & (sizeof(size_t) * 2 - 1)) == 0, "Alignment check");
|
||||
|
||||
// Sanity check
|
||||
assert(get_memory_tracking_level(memblock) == level,
|
||||
"Wrong tracking level");
|
||||
|
||||
#ifdef ASSERT
|
||||
if (level > NMT_minimal) {
|
||||
// Read back
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue