diff options
| author | 2025-02-26 16:14:13 -0800 | |
|---|---|---|
| committer | 2025-02-26 16:14:13 -0800 | |
| commit | 6e5478a5747f4e0c5d7874e371d662cbef82ef7e (patch) | |
| tree | dfee3d56c8e3207ea5e449c7f1c3e5ac68ce8eff | |
| parent | c96f8b463f2e085d61d7ac1f5515860859e5cbe2 (diff) | |
| parent | faa89ac4b60190860ac3c7898929a5bfec3123b3 (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.cc | 8 |
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_) { |