From 012223f6d94bbcf3bcc5b35c85bfc3db2630ee6f Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Sun, 12 May 2024 12:26:55 +0200 Subject: [PATCH] src: allow preventing debug signal handler start PR-URL: https://github.com/nodejs/node/pull/46681 Reviewed-By: Anna Henningsen Reviewed-By: James M Snell --- src/env-inl.h | 4 ++++ src/env.h | 1 + src/inspector_agent.cc | 7 +++++-- src/node.h | 6 +++++- 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/env-inl.h b/src/env-inl.h index 099e7352e68af6..63ce35ba68b48a 100644 --- a/src/env-inl.h +++ b/src/env-inl.h @@ -677,6 +677,10 @@ inline bool Environment::no_global_search_paths() const { !options_->global_search_paths; } +inline bool Environment::should_start_debug_signal_handler() const { + return (flags_ & EnvironmentFlags::kNoStartDebugSignalHandler) == 0; +} + inline bool Environment::no_browser_globals() const { // configure --no-browser-globals #ifdef NODE_NO_BROWSER_GLOBALS diff --git a/src/env.h b/src/env.h index 904dda4caf9695..3b3724d6c7156b 100644 --- a/src/env.h +++ b/src/env.h @@ -801,6 +801,7 @@ class Environment : public MemoryRetainer { inline bool tracks_unmanaged_fds() const; inline bool hide_console_windows() const; inline bool no_global_search_paths() const; + inline bool should_start_debug_signal_handler() const; inline bool no_browser_globals() const; inline uint64_t thread_id() const; inline worker::Worker* worker_context() const; diff --git a/src/inspector_agent.cc b/src/inspector_agent.cc index cb82f5239a5638..0e7b8fd1c2b3e5 100644 --- a/src/inspector_agent.cc +++ b/src/inspector_agent.cc @@ -717,8 +717,11 @@ bool Agent::Start(const std::string& path, StartIoThreadAsyncCallback)); uv_unref(reinterpret_cast(&start_io_thread_async)); start_io_thread_async.data = this; - // Ignore failure, SIGUSR1 won't work, but that should not block node start. - StartDebugSignalHandler(); + if (parent_env_->should_start_debug_signal_handler()) { + // Ignore failure, SIGUSR1 won't work, but that should not block node + // start. + StartDebugSignalHandler(); + } parent_env_->AddCleanupHook([](void* data) { Environment* env = static_cast(data); diff --git a/src/node.h b/src/node.h index 58c021f67e92c3..7047a667f7f1b2 100644 --- a/src/node.h +++ b/src/node.h @@ -657,7 +657,11 @@ enum Flags : uint64_t { // This control is needed by embedders who may not want to initialize the V8 // inspector in situations where one has already been created, // e.g. Blink's in Chromium. - kNoCreateInspector = 1 << 9 + kNoCreateInspector = 1 << 9, + // Controls where or not the InspectorAgent for this Environment should + // call StartDebugSignalHandler. This control is needed by embedders who may + // not want to allow other processes to start the V8 inspector. + kNoStartDebugSignalHandler = 1 << 10 }; } // namespace EnvironmentFlags