summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Lokesh Gidra <lokeshgidra@google.com> 2025-02-26 16:14:13 -0800
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2025-02-26 16:14:13 -0800
commit6e5478a5747f4e0c5d7874e371d662cbef82ef7e (patch)
treedfee3d56c8e3207ea5e449c7f1c3e5ac68ce8eff
parentc96f8b463f2e085d61d7ac1f5515860859e5cbe2 (diff)
parentfaa89ac4b60190860ac3c7898929a5bfec3123b3 (diff)
Fix mid-gen-end alignment when deciding to skip compaction am: faa89ac4b6
Original change: https://android-review.googlesource.com/c/platform/art/+/3510633 Change-Id: I352ffd292474f97ad0458e8b53f7e858f38d5e8d Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--runtime/gc/collector/mark_compact.cc8
1 files changed, 6 insertions, 2 deletions
diff --git a/runtime/gc/collector/mark_compact.cc b/runtime/gc/collector/mark_compact.cc
index 9ff1746a70..d7912dcc38 100644
--- a/runtime/gc/collector/mark_compact.cc
+++ b/runtime/gc/collector/mark_compact.cc
@@ -1217,8 +1217,12 @@ bool MarkCompact::PrepareForCompaction() {
DCHECK_EQ(chunk_info_vec_[i], 0u);
}
if (black_objs_slide_diff_ == 0) {
- // Regardless of the gc-type, there are no pages to be compacted.
- mid_gen_end_ = black_dense_end_;
+ // Regardless of the gc-type, there are no pages to be compacted. Ensure
+ // that we don't shrink the mid-gen, which will become old-gen in
+ // FinishPhase(), thereby possibly moving some objects back to young-gen,
+ // which can cause memory corruption due to missing card marks.
+ mid_gen_end_ = std::max(mid_gen_end_, black_dense_end_);
+ mid_gen_end_ = std::min(mid_gen_end_, post_compact_end_);
return false;
}
if (use_generational_) {