Index: src/heap/spaces.cc |
diff --git a/src/heap/spaces.cc b/src/heap/spaces.cc |
index 9bba6dd89b9cfe6e3e3ba0933d6d89b87dfc78ca..bc0a3d5c144c20301f1cd24d16821ac48f81fb90 100644 |
--- a/src/heap/spaces.cc |
+++ b/src/heap/spaces.cc |
@@ -2386,16 +2386,14 @@ HeapObject* FreeList::Allocate(int size_in_bytes) { |
// skipped when scanning the heap. This also puts it back in the free list |
// if it is big enough. |
owner_->Free(owner_->top(), old_linear_size); |
+ owner_->SetTopAndLimit(nullptr, nullptr); |
owner_->heap()->incremental_marking()->OldSpaceStep(size_in_bytes - |
old_linear_size); |
int new_node_size = 0; |
FreeSpace* new_node = FindNodeFor(size_in_bytes, &new_node_size); |
- if (new_node == NULL) { |
- owner_->SetTopAndLimit(NULL, NULL); |
- return NULL; |
- } |
+ if (new_node == nullptr) return nullptr; |
int bytes_left = new_node_size - size_in_bytes; |
DCHECK(bytes_left >= 0); |
@@ -2439,10 +2437,6 @@ HeapObject* FreeList::Allocate(int size_in_bytes) { |
// linear allocation area. |
owner_->SetTopAndLimit(new_node->address() + size_in_bytes, |
new_node->address() + new_node_size); |
- } else { |
- // TODO(gc) Try not freeing linear allocation region when bytes_left |
- // are zero. |
- owner_->SetTopAndLimit(NULL, NULL); |
} |
return new_node; |
@@ -2553,7 +2547,10 @@ intptr_t PagedSpace::SizeOfObjects() { |
DCHECK(!FLAG_concurrent_sweeping || |
heap()->mark_compact_collector()->sweeping_in_progress() || |
(unswept_free_bytes_ == 0)); |
- return Size() - unswept_free_bytes_ - (limit() - top()); |
+ const intptr_t size = Size() - unswept_free_bytes_ - (limit() - top()); |
+ DCHECK_GE(size, 0); |
+ USE(size); |
+ return size; |
} |