| 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)) {
|
|
|