Skip to content

Commit

Permalink
[snapshot] Use Handle to track name in CodeSerializer::Deserialize
Browse files Browse the repository at this point in the history
The `Script::InitLineEnds(Handle<Script>(script, isolate));` line
may lead to objects being moved around on the heap, so it’s necessary
to use a `Handle` to track that.

This was causing crashes in Node.js in Debug mode when using the
code cache in combination with the CPU profiler.

Refs: nodejs/node#27307
Change-Id: I392b4c00c6ebad44753f87fcbf2e3278ea7799a6
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1575698
Reviewed-by: Jakob Gruber <jgruber@chromium.org>
Reviewed-by: Peter Marshall <petermarshall@chromium.org>
Commit-Queue: Peter Marshall <petermarshall@chromium.org>
Cr-Commit-Position: refs/heads/master@{#61036}
  • Loading branch information
addaleax authored and Commit Bot committed Apr 26, 2019
1 parent b422b17 commit 5d0cf6b
Showing 1 changed file with 7 additions and 6 deletions.
13 changes: 7 additions & 6 deletions src/snapshot/code-serializer.cc
Expand Up @@ -319,11 +319,12 @@ MaybeHandle<SharedFunctionInfo> CodeSerializer::Deserialize(
Script script = Script::cast(result->script());
Handle<Script> script_handle(script, isolate);
if (script->name()->IsString()) name = String::cast(script->name());
Handle<String> name_handle(name, isolate);
if (FLAG_log_function_events) {
LOG(isolate,
FunctionEvent("deserialize", script->id(),
timer.Elapsed().InMillisecondsF(),
result->StartPosition(), result->EndPosition(), name));
LOG(isolate, FunctionEvent("deserialize", script->id(),
timer.Elapsed().InMillisecondsF(),
result->StartPosition(), result->EndPosition(),
*name_handle));
}
if (log_code_creation) {
Script::InitLineEnds(Handle<Script>(script, isolate));
Expand All @@ -335,8 +336,8 @@ MaybeHandle<SharedFunctionInfo> CodeSerializer::Deserialize(
int line_num = script->GetLineNumber(info->StartPosition()) + 1;
int column_num = script->GetColumnNumber(info->StartPosition()) + 1;
PROFILE(isolate, CodeCreateEvent(CodeEventListener::SCRIPT_TAG,
info->abstract_code(), info, name,
line_num, column_num));
info->abstract_code(), info,
*name_handle, line_num, column_num));
}
}
}
Expand Down

0 comments on commit 5d0cf6b

Please sign in to comment.