Index: src/debug.cc |
diff --git a/src/debug.cc b/src/debug.cc |
index 9a9d737ed638d37b33c55bb6449f784226b97e68..a994eb008511c44574ade6986d6463ea53f1c70e 100644 |
--- a/src/debug.cc |
+++ b/src/debug.cc |
@@ -2048,7 +2048,6 @@ void Debug::PrepareForBreakPoints() { |
Heap* heap = isolate_->heap(); |
heap->CollectAllGarbage(Heap::kMakeHeapIterableMask, |
"preparing for breakpoints"); |
- HeapIterator iterator(heap); |
// Ensure no GC in this scope as we are going to use gc_metadata |
// field in the Code object to mark active functions. |
@@ -2068,6 +2067,7 @@ void Debug::PrepareForBreakPoints() { |
// Scan the heap for all non-optimized functions which have no |
// debug break slots and are not active or inlined into an active |
// function and mark them for lazy compilation. |
+ HeapIterator iterator(heap); |
HeapObject* obj = NULL; |
while (((obj = iterator.next()) != NULL)) { |
if (obj->IsJSFunction()) { |
@@ -2192,7 +2192,9 @@ Object* Debug::FindSharedFunctionInfoInScript(Handle<Script> script, |
Handle<SharedFunctionInfo> target; |
Heap* heap = isolate_->heap(); |
while (!done) { |
- { // Extra scope for iterator. |
+ { // Extra scope for iterator and no-allocation. |
+ heap->EnsureHeapIsIterable(); |
+ DisallowHeapAllocation no_alloc_during_heap_iteration; |
HeapIterator iterator(heap); |
for (HeapObject* obj = iterator.next(); |
obj != NULL; obj = iterator.next()) { |
@@ -2522,6 +2524,8 @@ void Debug::CreateScriptCache() { |
// scripts which are no longer referenced. The second also sweeps precisely, |
// which saves us doing yet another GC to make the heap iterable. |
heap->CollectAllGarbage(Heap::kNoGCFlags, "Debug::CreateScriptCache"); |
+ heap->CollectAllGarbage(Heap::kMakeHeapIterableMask, |
+ "Debug::CreateScriptCache"); |
ASSERT(script_cache_ == NULL); |
script_cache_ = new ScriptCache(isolate_); |
@@ -2529,6 +2533,7 @@ void Debug::CreateScriptCache() { |
// Scan heap for Script objects. |
int count = 0; |
HeapIterator iterator(heap); |
+ DisallowHeapAllocation no_allocation; |
for (HeapObject* obj = iterator.next(); obj != NULL; obj = iterator.next()) { |
if (obj->IsScript() && Script::cast(obj)->HasValidSource()) { |