diff --git a/src/node_snapshotable.cc b/src/node_snapshotable.cc index 327246743bb076..9330da6568ce20 100644 --- a/src/node_snapshotable.cc +++ b/src/node_snapshotable.cc @@ -15,6 +15,10 @@ #include "node_v8.h" #include "node_v8_platform-inl.h" +#if HAVE_INSPECTOR +#include "inspector/worker_inspector.h" // ParentInspectorHandle +#endif + namespace node { using v8::Context; @@ -136,7 +140,7 @@ void SnapshotBuilder::Generate(SnapshotData* out, nullptr, node::EnvironmentFlags::kDefaultFlags, {}); - // TODO(joyeecheung): run env->InitializeInspector({}) here. + // Run scripts in lib/internal/bootstrap/ { TryCatch bootstrapCatch(isolate); @@ -153,6 +157,9 @@ void SnapshotBuilder::Generate(SnapshotData* out, // could also explore snapshotting other kinds of execution modes // in the future). if (per_process::cli_options->build_snapshot) { +#if HAVE_INSPECTOR + env->InitializeInspector({}); +#endif TryCatch bootstrapCatch(isolate); // TODO(joyeecheung): we could use the result for something special, // like setting up initializers that should be invoked at snapshot @@ -163,7 +170,15 @@ void SnapshotBuilder::Generate(SnapshotData* out, PrintCaughtException(isolate, context, bootstrapCatch); } result.ToLocalChecked(); - // TODO(joyeecheung): run SpinEventLoop here. + // FIXME(joyeecheung): right now running the loop in the snapshot + // builder seems to introduces inconsistencies in JS land that need to + // be synchronized again after snapshot restoration. + int exit_code = SpinEventLoop(env).FromMaybe(1); + CHECK_EQ(exit_code, 0); + if (bootstrapCatch.HasCaught()) { + PrintCaughtException(isolate, context, bootstrapCatch); + abort(); + } } if (per_process::enabled_debug_list.enabled(DebugCategory::MKSNAPSHOT)) {