Index: src/heap/mark-compact.cc |
diff --git a/src/heap/mark-compact.cc b/src/heap/mark-compact.cc |
index 1c5299fb6021b67fbcfd16e41bf81c6010660faa..77d084266264fbd78f56bc16115818a92b223ff4 100644 |
--- a/src/heap/mark-compact.cc |
+++ b/src/heap/mark-compact.cc |
@@ -1861,27 +1861,26 @@ |
current_cell >>= 1; |
// TODO(hpayer): Refactor EvacuateObject and call this function instead. |
- if (heap()->ShouldBePromoted(object->address(), size)) { |
- if (!TryPromoteObject(object, size)) { |
- V8::FatalProcessOutOfMemory("Full GC promotion failed"); |
+ if (heap()->ShouldBePromoted(object->address(), size) && |
+ TryPromoteObject(object, size)) { |
+ continue; |
+ } |
+ |
+ AllocationResult allocation = new_space->AllocateRaw(size); |
+ if (allocation.IsRetry()) { |
+ if (!new_space->AddFreshPage()) { |
+ // Shouldn't happen. We are sweeping linearly, and to-space |
+ // has the same number of pages as from-space, so there is |
+ // always room. |
+ UNREACHABLE(); |
} |
- } else { |
- AllocationResult allocation = new_space->AllocateRaw(size); |
- if (allocation.IsRetry()) { |
- if (!new_space->AddFreshPage()) { |
- // Shouldn't happen. We are sweeping linearly, and to-space |
- // has the same number of pages as from-space, so there is |
- // always room. |
- UNREACHABLE(); |
- } |
- allocation = new_space->AllocateRaw(size); |
- DCHECK(!allocation.IsRetry()); |
- } |
- Object* target = allocation.ToObjectChecked(); |
- |
- MigrateObject(HeapObject::cast(target), object, size, NEW_SPACE); |
- heap()->IncrementSemiSpaceCopiedObjectSize(size); |
- } |
+ allocation = new_space->AllocateRaw(size); |
+ DCHECK(!allocation.IsRetry()); |
+ } |
+ Object* target = allocation.ToObjectChecked(); |
+ |
+ MigrateObject(HeapObject::cast(target), object, size, NEW_SPACE); |
+ heap()->IncrementSemiSpaceCopiedObjectSize(size); |
} |
*cells = 0; |
} |