Chromium Code Reviews| Index: src/heap-inl.h |
| diff --git a/src/heap-inl.h b/src/heap-inl.h |
| index c065b73daa70354c5652b7775d1f46b671b2d6d4..33bc2c7cb5649d60a1c9bfe6e89146a9a0e8c945 100644 |
| --- a/src/heap-inl.h |
| +++ b/src/heap-inl.h |
| @@ -40,12 +40,26 @@ namespace v8 { |
| namespace internal { |
| void PromotionQueue::insert(HeapObject* target, int size) { |
| + if (emergency_stack_ != NULL) { |
| + emergency_stack_->Add(Entry(target, size)); |
| + return; |
| + } |
| + |
| if (NewSpacePage::IsAtStart(reinterpret_cast<Address>(rear_))) { |
| NewSpacePage* rear_page = |
| NewSpacePage::FromAddress(reinterpret_cast<Address>(rear_)); |
| ASSERT(!rear_page->prev_page()->is_anchor()); |
| rear_ = reinterpret_cast<intptr_t*>(rear_page->prev_page()->body_limit()); |
| } |
| + |
| + Page* rear_page = Page::FromAddress(reinterpret_cast<Address>(rear_ - 2)); |
| + Page* limit_page = Page::FromAllocationTop(reinterpret_cast<Address>(limit_)); |
| + if (rear_page == limit_page && (rear_ - 2) < limit_) { |
| + RelocateQueueHead(); |
|
Erik Corry
2011/11/07 16:35:25
This one asserts that there is something to reloca
|
| + emergency_stack_->Add(Entry(target, size)); |
| + return; |
| + } |
| + |
| *(--rear_) = reinterpret_cast<intptr_t>(target); |
| *(--rear_) = size; |
| // Assert no overflow into live objects. |