Reviewers: Mads Ager,

Message:
I will investigate further the test crashes that I found by manually introducing
a GC in the lazy compile function.

Description:
Reorder SharedFunctionInfo setup in lazy compile, quick fix for crbug.com/49099

This fixes issue 49099 (http://crbug.com/49099) that makes chromium
crash if a gc is triggered by setting the scopeinfo in CompileLazy. If
this gc triggers code flushing the compiled function could be flushed,
causing the ASSERT(shared->is_compiled()) to fail. By reordering the
two methods we make sure that no allocation happens before the end of
the method.


Please review this at http://codereview.chromium.org/3035006/show

SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/

Affected files:
  M     src/compiler.cc


Index: src/compiler.cc
===================================================================
--- src/compiler.cc     (revision 5085)
+++ src/compiler.cc     (working copy)
@@ -449,8 +449,12 @@
                             code);

// Update the shared function info with the compiled code and the scope info.
+  // Please note, that the order of the sharedfunction initialization is
+  // important since set_scope_info might trigger a GC, causing the ASSERT
+  // below to be invalid if the code was flushed. By settting the code
+  // object last we avoid this.
+  shared->set_scope_info(*SerializedScopeInfo::Create(info->scope()));
   shared->set_code(*code);
-  shared->set_scope_info(*SerializedScopeInfo::Create(info->scope()));

   // Set the expected number of properties for instances.
SetExpectedNofPropertiesFromEstimate(shared, lit->expected_property_count());


--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to