Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit edafab7

Browse filesBrowse files
legendecasaduh95
authored andcommitted
src: drain platform tasks before creating startup snapshot
Drain the loop and platform tasks before creating a snapshot. This is necessary to ensure that the no roots are held by the the platform tasks, which may reference objects associated with a context. For example, a WeakRef may schedule an per-isolate platform task as a GC root, and referencing an object in a context, causing an assertion in the snapshot creator. PR-URL: #56403 Refs: #56292 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
1 parent 295db19 commit edafab7
Copy full SHA for edafab7

File tree

Expand file treeCollapse file tree

1 file changed

+14
-10
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

1 file changed

+14
-10
lines changed
Open diff view settings
Collapse file

‎src/node_snapshotable.cc‎

Copy file name to clipboardExpand all lines: src/node_snapshotable.cc
+14-10Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -973,25 +973,29 @@ ExitCode BuildSnapshotWithoutCodeCache(
973973
}
974974
});
975975

976+
Context::Scope context_scope(setup->context());
977+
Environment* env = setup->env();
978+
976979
// Run the custom main script for fully customized snapshots.
977980
if (snapshot_type == SnapshotMetadata::Type::kFullyCustomized) {
978-
Context::Scope context_scope(setup->context());
979-
Environment* env = setup->env();
980981
#if HAVE_INSPECTOR
981982
env->InitializeInspector({});
982983
#endif
983984
if (LoadEnvironment(env, builder_script_content.value()).IsEmpty()) {
984985
return ExitCode::kGenericUserError;
985986
}
987+
}
986988

987-
// FIXME(joyeecheung): right now running the loop in the snapshot
988-
// builder might introduce inconsistencies in JS land that need to
989-
// be synchronized again after snapshot restoration.
990-
ExitCode exit_code =
991-
SpinEventLoopInternal(env).FromMaybe(ExitCode::kGenericUserError);
992-
if (exit_code != ExitCode::kNoFailure) {
993-
return exit_code;
994-
}
989+
// Drain the loop and platform tasks before creating a snapshot. This is
990+
// necessary to ensure that the no roots are held by the the platform
991+
// tasks, which may reference objects associated with a context. For
992+
// example, a WeakRef may schedule an per-isolate platform task as a GC
993+
// root, and referencing an object in a context, causing an assertion in
994+
// the snapshot creator.
995+
ExitCode exit_code =
996+
SpinEventLoopInternal(env).FromMaybe(ExitCode::kGenericUserError);
997+
if (exit_code != ExitCode::kNoFailure) {
998+
return exit_code;
995999
}
9961000
}
9971001

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.