Commit 5caa11da authored by ricow@chromium.org's avatar ricow@chromium.org

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.

Review URL: http://codereview.chromium.org/3035006

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@5089 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 49573265
...@@ -449,8 +449,12 @@ bool Compiler::CompileLazy(CompilationInfo* info) { ...@@ -449,8 +449,12 @@ bool Compiler::CompileLazy(CompilationInfo* info) {
code); code);
// Update the shared function info with the compiled code and the scope info. // Update the shared function info with the compiled code and the scope info.
shared->set_code(*code); // 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_scope_info(*SerializedScopeInfo::Create(info->scope()));
shared->set_code(*code);
// Set the expected number of properties for instances. // Set the expected number of properties for instances.
SetExpectedNofPropertiesFromEstimate(shared, lit->expected_property_count()); SetExpectedNofPropertiesFromEstimate(shared, lit->expected_property_count());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment