Skip to content

Commit

Permalink
bootstrap: run inspector and event loop in snapshot builder
Browse files Browse the repository at this point in the history
This makes --inspect and stdin/out functional in the embedded snapshot,
currently it's not guaranteed that these work perfectly, the
plan is to investigate any out-of-sync states that might appear
in user land snapshots with this while the it is a configure-time
feature.

PR-URL: nodejs/node#42466
Reviewed-By: Darshan Sen <[email protected]>
Reviewed-By: Mohammed Keyvanzadeh <[email protected]>
Reviewed-By: Khaidi Chu <[email protected]>
Reviewed-By: Chengzhong Wu <[email protected]>
  • Loading branch information
joyeecheung authored and guangwong committed Oct 10, 2022
1 parent 498b1a6 commit 8170d39
Showing 1 changed file with 17 additions and 2 deletions.
19 changes: 17 additions & 2 deletions src/node_snapshotable.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand All @@ -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
Expand All @@ -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)) {
Expand Down

0 comments on commit 8170d39

Please sign in to comment.