diff options
| -rw-r--r-- | runtime/gc/allocator/rosalloc.cc | 6 | ||||
| -rw-r--r-- | runtime/gc/allocator/rosalloc.h | 1 | ||||
| -rw-r--r-- | runtime/gc/space/memory_tool_malloc_space-inl.h | 6 |
3 files changed, 10 insertions, 3 deletions
diff --git a/runtime/gc/allocator/rosalloc.cc b/runtime/gc/allocator/rosalloc.cc index 8b125dd167..2c487fe8df 100644 --- a/runtime/gc/allocator/rosalloc.cc +++ b/runtime/gc/allocator/rosalloc.cc @@ -58,10 +58,16 @@ RosAlloc::RosAlloc(void* base, size_t capacity, size_t max_capacity, page_release_mode_(page_release_mode), page_release_size_threshold_(page_release_size_threshold), is_running_on_memory_tool_(running_on_memory_tool) { + DCHECK_ALIGNED(base, kPageSize); DCHECK_EQ(RoundUp(capacity, kPageSize), capacity); DCHECK_EQ(RoundUp(max_capacity, kPageSize), max_capacity); CHECK_LE(capacity, max_capacity); CHECK_ALIGNED(page_release_size_threshold_, kPageSize); + // Zero the memory explicitly (don't rely on that the mem map is zero-initialized). + if (!kMadviseZeroes) { + memset(base_, 0, max_capacity); + } + CHECK_EQ(madvise(base_, max_capacity, MADV_DONTNEED), 0); if (!initialized_) { Initialize(); } diff --git a/runtime/gc/allocator/rosalloc.h b/runtime/gc/allocator/rosalloc.h index a472a8bffb..b12cb5b0dd 100644 --- a/runtime/gc/allocator/rosalloc.h +++ b/runtime/gc/allocator/rosalloc.h @@ -192,6 +192,7 @@ class RosAlloc { Verify(); } DCHECK(slot != nullptr); + DCHECK(slot->Next() == nullptr); Slot** headp = reinterpret_cast<Slot**>(&head_); Slot** tailp = kUseTail ? reinterpret_cast<Slot**>(&tail_) : nullptr; Slot* old_head = *headp; diff --git a/runtime/gc/space/memory_tool_malloc_space-inl.h b/runtime/gc/space/memory_tool_malloc_space-inl.h index ea8b8aae5f..6cb2465539 100644 --- a/runtime/gc/space/memory_tool_malloc_space-inl.h +++ b/runtime/gc/space/memory_tool_malloc_space-inl.h @@ -240,9 +240,9 @@ MemoryToolMallocSpace<S, kAdjustForRedzoneInAllocSize, kUseObjSizeForUsable>::MemoryToolMallocSpace( MemMap* mem_map, size_t initial_size, Params... params) : S(mem_map, initial_size, params...) { - MEMORY_TOOL_MAKE_DEFINED(mem_map->Begin(), initial_size); - MEMORY_TOOL_MAKE_UNDEFINED(mem_map->Begin() + initial_size, - mem_map->Size() - initial_size); + // Don't want to change the valgrind states of the mem map here as the allocator is already + // initialized at this point and that may interfere with what the allocator does internally. Note + // that the tail beyond the initial size is mprotected. } template <typename S, |