GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — src: drain platform tasks before creating startup snapshot · nodejs/node@edafab7

File tree

Expand file treeCollapse file tree
Open diff view settings
Filter options
  • src
    • node_snapshotable.cc
Expand file treeCollapse file tree
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)
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.