summaryrefslogtreecommitdiffstats
path: root/runtime/gc
diff options
context:
space:
mode:
authorMathieu Chartier <mathieuc@google.com>2014-04-11 16:42:46 -0700
committerMathieu Chartier <mathieuc@google.com>2014-04-11 16:52:59 -0700
commitb272cd3013e046b7b001a091b0925b99a844e382 (patch)
tree164ea8da2ffe16cfdfa7c4f939a6b48fd2ef6ffa /runtime/gc
parent248015696ee087878656fb53e37cbf7be2b97e4d (diff)
downloadart-b272cd3013e046b7b001a091b0925b99a844e382.zip
art-b272cd3013e046b7b001a091b0925b99a844e382.tar.gz
art-b272cd3013e046b7b001a091b0925b99a844e382.tar.bz2
Fix heap verification with SS/GSS.
Since I had removed the SwapSemiSpaces it was trying to verify references in the from space of the semispace collector, which isn't necessarily valid. Bug: 13989162 Change-Id: I8e0b7119a1a53d63f2c71ecdb276290eda5bae07
Diffstat (limited to 'runtime/gc')
-rw-r--r--runtime/gc/collector/semi_space.cc4
-rw-r--r--runtime/gc/heap.cc2
2 files changed, 5 insertions, 1 deletions
diff --git a/runtime/gc/collector/semi_space.cc b/runtime/gc/collector/semi_space.cc
index 6e31cb7..ccb38c4 100644
--- a/runtime/gc/collector/semi_space.cc
+++ b/runtime/gc/collector/semi_space.cc
@@ -393,10 +393,10 @@ void SemiSpace::ReclaimPhase() {
// Note: Freed bytes can be negative if we copy form a compacted space to a free-list backed
// space.
heap_->RecordFree(freed_objects, freed_bytes);
+
timings_.StartSplit("PreSweepingGcVerification");
heap_->PreSweepingGcVerification(this);
timings_.EndSplit();
-
{
WriterMutexLock mu(self_, *Locks::heap_bitmap_lock_);
// Reclaim unmarked objects.
@@ -411,6 +411,8 @@ void SemiSpace::ReclaimPhase() {
TimingLogger::ScopedSplit split("UnBindBitmaps", &timings_);
GetHeap()->UnBindBitmaps();
}
+ // TODO: Do this before doing verification since the from space may have objects which weren't
+ // moved and point to dead objects.
from_space_->Clear();
// Protect the from space.
VLOG(heap) << "Protecting space " << *from_space_;
diff --git a/runtime/gc/heap.cc b/runtime/gc/heap.cc
index e44ec6a..64dafe7 100644
--- a/runtime/gc/heap.cc
+++ b/runtime/gc/heap.cc
@@ -2403,9 +2403,11 @@ void Heap::PreSweepingGcVerification(collector::GarbageCollector* gc) {
WriterMutexLock mu(self, *Locks::heap_bitmap_lock_);
// Swapping bound bitmaps does nothing.
gc->SwapBitmaps();
+ SwapSemiSpaces();
if (!VerifyHeapReferences()) {
LOG(FATAL) << "Pre sweeping " << gc->GetName() << " GC verification failed";
}
+ SwapSemiSpaces();
gc->SwapBitmaps();
}
}