Index: src/runtime.cc |
diff --git a/src/runtime.cc b/src/runtime.cc |
index 3e8978824da457a34caeebe758babc457c51315b..c3610fbe3ffb6df22c959dd2384d79759cc3011c 100644 |
--- a/src/runtime.cc |
+++ b/src/runtime.cc |
@@ -13111,14 +13111,6 @@ RUNTIME_FUNCTION(Runtime_DebugReferencedBy) { |
HandleScope scope(isolate); |
ASSERT(args.length() == 3); |
- // First perform a full GC in order to avoid references from dead objects. |
- Heap* heap = isolate->heap(); |
- heap->CollectAllGarbage(Heap::kMakeHeapIterableMask, "%DebugReferencedBy"); |
- // The heap iterator reserves the right to do a GC to make the heap iterable. |
- // Due to the GC above we know it won't need to do that, but it seems cleaner |
- // to get the heap iterator constructed before we start having unprotected |
- // Object* locals that are not protected by handles. |
- |
// Check parameters. |
CONVERT_ARG_HANDLE_CHECKED(JSObject, target, 0); |
CONVERT_ARG_HANDLE_CHECKED(Object, instance_filter, 1); |
@@ -13136,21 +13128,27 @@ RUNTIME_FUNCTION(Runtime_DebugReferencedBy) { |
// Get the number of referencing objects. |
int count; |
- HeapIterator heap_iterator(heap); |
- count = DebugReferencedBy(&heap_iterator, |
- *target, *instance_filter, max_references, |
- NULL, 0, *arguments_function); |
+ // First perform a full GC in order to avoid dead objects and to make the heap |
+ // iterable. |
+ Heap* heap = isolate->heap(); |
+ heap->CollectAllGarbage(Heap::kMakeHeapIterableMask, "%DebugConstructedBy"); |
+ { |
+ HeapIterator heap_iterator(heap); |
+ count = DebugReferencedBy(&heap_iterator, |
+ *target, *instance_filter, max_references, |
+ NULL, 0, *arguments_function); |
+ } |
// Allocate an array to hold the result. |
Handle<FixedArray> instances = isolate->factory()->NewFixedArray(count); |
// Fill the referencing objects. |
- // AllocateFixedArray above does not make the heap non-iterable. |
- ASSERT(heap->IsHeapIterable()); |
- HeapIterator heap_iterator2(heap); |
- count = DebugReferencedBy(&heap_iterator2, |
- *target, *instance_filter, max_references, |
- *instances, count, *arguments_function); |
+ { |
+ HeapIterator heap_iterator(heap); |
+ count = DebugReferencedBy(&heap_iterator, |
+ *target, *instance_filter, max_references, |
+ *instances, count, *arguments_function); |
+ } |
// Return result as JS array. |
Handle<JSFunction> constructor( |
@@ -13201,9 +13199,6 @@ RUNTIME_FUNCTION(Runtime_DebugConstructedBy) { |
HandleScope scope(isolate); |
ASSERT(args.length() == 2); |
- // First perform a full GC in order to avoid dead objects. |
- Heap* heap = isolate->heap(); |
- heap->CollectAllGarbage(Heap::kMakeHeapIterableMask, "%DebugConstructedBy"); |
// Check parameters. |
CONVERT_ARG_HANDLE_CHECKED(JSFunction, constructor, 0); |
@@ -13212,24 +13207,31 @@ RUNTIME_FUNCTION(Runtime_DebugConstructedBy) { |
// Get the number of referencing objects. |
int count; |
- HeapIterator heap_iterator(heap); |
- count = DebugConstructedBy(&heap_iterator, |
- *constructor, |
- max_references, |
- NULL, |
- 0); |
+ // First perform a full GC in order to avoid dead objects and to make the heap |
+ // iterable. |
+ Heap* heap = isolate->heap(); |
+ heap->CollectAllGarbage(Heap::kMakeHeapIterableMask, "%DebugConstructedBy"); |
+ { |
+ HeapIterator heap_iterator(heap); |
+ count = DebugConstructedBy(&heap_iterator, |
+ *constructor, |
+ max_references, |
+ NULL, |
+ 0); |
+ } |
// Allocate an array to hold the result. |
Handle<FixedArray> instances = isolate->factory()->NewFixedArray(count); |
- ASSERT(heap->IsHeapIterable()); |
// Fill the referencing objects. |
- HeapIterator heap_iterator2(heap); |
- count = DebugConstructedBy(&heap_iterator2, |
- *constructor, |
- max_references, |
- *instances, |
- count); |
+ { |
+ HeapIterator heap_iterator2(heap); |
+ count = DebugConstructedBy(&heap_iterator2, |
+ *constructor, |
+ max_references, |
+ *instances, |
+ count); |
+ } |
// Return result as JS array. |
Handle<JSFunction> array_function( |
@@ -13361,8 +13363,6 @@ RUNTIME_FUNCTION(Runtime_LiveEditFindSharedFunctionInfosForScript) { |
int number; |
Heap* heap = isolate->heap(); |
{ |
- heap->EnsureHeapIsIterable(); |
- DisallowHeapAllocation no_allocation; |
HeapIterator heap_iterator(heap); |
Script* scr = *script; |
FixedArray* arr = *array; |
@@ -13370,8 +13370,6 @@ RUNTIME_FUNCTION(Runtime_LiveEditFindSharedFunctionInfosForScript) { |
} |
if (number > kBufferSize) { |
array = isolate->factory()->NewFixedArray(number); |
- heap->EnsureHeapIsIterable(); |
- DisallowHeapAllocation no_allocation; |
HeapIterator heap_iterator(heap); |
Script* scr = *script; |
FixedArray* arr = *array; |
@@ -14454,8 +14452,6 @@ static Handle<Object> Runtime_GetScriptFromScriptName( |
Handle<Script> script; |
Factory* factory = script_name->GetIsolate()->factory(); |
Heap* heap = script_name->GetHeap(); |
- heap->EnsureHeapIsIterable(); |
- DisallowHeapAllocation no_allocation_during_heap_iteration; |
HeapIterator iterator(heap); |
HeapObject* obj = NULL; |
while (script.is_null() && ((obj = iterator.next()) != NULL)) { |