Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJoyee Cheung <joyeec9h3@gmail.com>2022-03-24 16:50:55 +0300
committerJoyee Cheung <joyeec9h3@gmail.com>2022-03-31 14:29:16 +0300
commit01f6b9543f8a0c7db20c9e2871f4f794b950698e (patch)
tree0b77da8d604e1b0a629f8559a7323606dd11417b /src
parentc131fbb65230cc8f62cc0f41682388507a669684 (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.cc19
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)) {