Index: src/liveedit.cc |
diff --git a/src/liveedit.cc b/src/liveedit.cc |
index a538c0c76e08d320b5dd97dc9cca7d39e4466468..e6bb4b29a636297d25d1d69c9ca7ff3a7b1edb52 100644 |
--- a/src/liveedit.cc |
+++ b/src/liveedit.cc |
@@ -939,10 +939,13 @@ static void ReplaceCodeObject(Handle<Code> original, |
// to code objects (that are never in new space) without worrying about |
// write barriers. |
Heap* heap = original->GetHeap(); |
- HeapIterator iterator(heap); |
+ heap->CollectAllGarbage(Heap::kMakeHeapIterableMask, |
+ "liveedit.cc ReplaceCodeObject"); |
ASSERT(!heap->InNewSpace(*substitution)); |
+ DisallowHeapAllocation no_allocation; |
+ |
ReplacingVisitor visitor(*original, *substitution); |
// Iterate over all roots. Stack frames may have pointer into original code, |
@@ -952,6 +955,7 @@ static void ReplaceCodeObject(Handle<Code> original, |
// Now iterate over all pointers of all objects, including code_target |
// implicit pointers. |
+ HeapIterator iterator(heap); |
for (HeapObject* obj = iterator.next(); obj != NULL; obj = iterator.next()) { |
obj->Iterate(&visitor); |
} |
@@ -1015,6 +1019,8 @@ class LiteralFixer { |
template<typename Visitor> |
static void IterateJSFunctions(SharedFunctionInfo* shared_info, |
Visitor* visitor) { |
+ DisallowHeapAllocation no_allocation; |
+ |
HeapIterator iterator(shared_info->GetHeap()); |
for (HeapObject* obj = iterator.next(); obj != NULL; |
obj = iterator.next()) { |
@@ -1159,7 +1165,7 @@ void LiveEdit::ReplaceFunctionCode( |
Handle<SharedFunctionInfo> shared_info = shared_info_wrapper.GetInfo(); |
- isolate->heap()->MakeHeapIterable(); |
+ isolate->heap()->EnsureHeapIsIterable(); |
if (IsJSFunctionCode(shared_info->code())) { |
Handle<Code> code = compile_info_wrapper.GetFunctionCode(); |
@@ -1396,7 +1402,7 @@ void LiveEdit::PatchFunctionPositions(Handle<JSArray> shared_info_array, |
info->set_end_position(new_function_end); |
info->set_function_token_position(new_function_token_pos); |
- info->GetIsolate()->heap()->MakeHeapIterable(); |
+ info->GetIsolate()->heap()->EnsureHeapIsIterable(); |
if (IsJSFunctionCode(info->code())) { |
// Patch relocation info section of the code. |