Revision: 9423 Author: [email protected] Date: Mon Sep 26 03:24:42 2011 Log: Fix bug in PointersUpdatingVisitor::UpdatePointer.
It was updating the same pointer twice (was using InNewSpace instead of InFromSpace). Also make FLAG_never_compact supercede FLAG_always_compact. [email protected] BUG=v8:1721 Review URL: http://codereview.chromium.org/8041017 http://code.google.com/p/v8/source/detail?r=9423 Modified: /branches/bleeding_edge/src/mark-compact.cc ======================================= --- /branches/bleeding_edge/src/mark-compact.cc Mon Sep 26 01:53:27 2011 +++ /branches/bleeding_edge/src/mark-compact.cc Mon Sep 26 03:24:42 2011 @@ -483,7 +483,9 @@ ASSERT(state_ == IDLE); state_ = PREPARE_GC; #endif - ASSERT(!FLAG_always_compact || !FLAG_never_compact); + + // TODO(1726) Revert this into an assertion when compaction is enabled. + if (FLAG_never_compact) FLAG_always_compact = false; if (collect_maps_) CreateBackPointers(); #ifdef ENABLE_GDB_JIT_INTERFACE @@ -2454,11 +2456,13 @@ HeapObject* obj = HeapObject::cast(*p); - if (heap_->InNewSpace(obj) || - MarkCompactCollector::IsOnEvacuationCandidate(obj)) { - ASSERT(obj->map_word().IsForwardingAddress()); + MapWord map_word = obj->map_word(); + if (map_word.IsForwardingAddress()) { + ASSERT(heap_->InFromSpace(obj) || + MarkCompactCollector::IsOnEvacuationCandidate(obj)); *p = obj->map_word().ToForwardingAddress(); - ASSERT(!MarkCompactCollector::IsOnEvacuationCandidate(*p)); + ASSERT(!heap_->InFromSpace(*p) && + !MarkCompactCollector::IsOnEvacuationCandidate(*p)); } } -- v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev
