| 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;
|
| }
|
|
|