diff options
author | Joyee Cheung <joyeec9h3@gmail.com> | 2022-03-24 16:50:55 +0300 |
---|---|---|
committer | Joyee Cheung <joyeec9h3@gmail.com> | 2022-03-31 14:29:16 +0300 |
commit | 01f6b9543f8a0c7db20c9e2871f4f794b950698e (patch) | |
tree | 0b77da8d604e1b0a629f8559a7323606dd11417b /src | |
parent | c131fbb65230cc8f62cc0f41682388507a669684 (diff) |
bootstrap: run inspector and event loop in snapshot builder
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: https://github.com/nodejs/node/pull/42466
Reviewed-By: Darshan Sen <raisinten@gmail.com>
Reviewed-By: Mohammed Keyvanzadeh <mohammadkeyvanzade94@gmail.com>
Reviewed-By: Khaidi Chu <i@2333.moe>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/node_snapshotable.cc | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/src/node_snapshotable.cc b/src/node_snapshotable.cc index 327246743bb..9330da6568c 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)) { |