From: peter.rybin@gmail.com Date: Mon, 25 Jun 2012 21:43:50 +0000 (+0000) Subject: Fix liveedit heap traversal bug with write barrier X-Git-Tag: upstream/4.7.83~16459 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5a065cf8dee7e11457e32af451ea9f8002a04726;p=platform%2Fupstream%2Fv8.git Fix liveedit heap traversal bug with write barrier Review URL: https://chromiumcodereview.appspot.com/10639006 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@11927 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- diff --git a/src/liveedit.cc b/src/liveedit.cc index 80e18bb..d99c4a0 100644 --- a/src/liveedit.cc +++ b/src/liveedit.cc @@ -968,6 +968,14 @@ class ReplacingVisitor : public ObjectVisitor { static void ReplaceCodeObject(Code* original, Code* substitution) { ASSERT(!HEAP->InNewSpace(substitution)); + // Perform a full GC in order to ensure that we are not in the middle of an + // incremental marking phase when we are replacing the code object. + // Since we are not in an incremental marking phase we can write pointers + // to code objects (that are never in new space) without worrying about + // write barriers. + HEAP->CollectAllGarbage(Heap::kMakeHeapIterableMask, + "liveedit.cc ReplaceCodeObject"); + AssertNoAllocation no_allocations_please; ReplacingVisitor visitor(original, substitution);