electron/patches/node/enable_crashpad_linux_node_processes.patch
electron-roller[bot] 1d9a4ab02c
chore: bump node to v18.13.0 (main) (#36818)
* chore: bump node in DEPS to v18.13.0

* child_process: validate arguments for null bytes

https://github.com/nodejs/node/pull/44782

* bootstrap: merge main thread and worker thread initializations

https://github.com/nodejs/node/pull/44869

* module: ensure relative requires work from deleted directories

https://github.com/nodejs/node/pull/42384

* src: add support for externally shared js builtins

https://github.com/nodejs/node/issues/44000

* lib: disambiguate `native module` to `binding`

https://github.com/nodejs/node/pull/45673

* test: convert test-debugger-pid to async/await

https://github.com/nodejs/node/pull/45179

* deps: upgrade to libuv 1.44.2

https://github.com/nodejs/node/pull/42340

* src: fix cppgc incompatibility in v8

https://github.com/nodejs/node/pull/43521

* src: use qualified `std::move` call in node_http2

https://github.com/nodejs/node/pull/45555

* build: fix env.h for cpp20

https://github.com/nodejs/node/pull/45516

* test: remove experimental-wasm-threads flag

https://github.com/nodejs/node/pull/45074

* src: iwyu in cleanup_queue.cc

https://github.com/nodejs/node/pull/44983

* src: add missing include for `std::all_of`

https://github.com/nodejs/node/pull/45541

* deps: update ICU to 72.1

https://github.com/nodejs/node/pull/45068

* chore: fixup patch indices

* chore: remove errant semicolons

- https://github.com/nodejs/node/pull/44179
- https://github.com/nodejs/node/pull/44193

* src: add support for externally shared js builtins

https://github.com/nodejs/node/pull/44376

* chore: add missing GN filenames

* deps: update nghttp2 to 1.51.0

https://github.com/nodejs/node/pull/45537

* chore: disable more Node.js snapshot tests

The Snapshot feature is currently disabled

* chore: disable ICU timezone tests

Node.js uses a different version of ICU than Electron so they
will often be out of sync.

* chore: disable threadpool event tracing test

Event tracing is not enabled in embedded Node.js

* chore: fixup patch indices

* chore: comments from review

Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com>
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2023-01-11 11:33:48 +01:00

51 lines
2.1 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: VerteDinde <keeleymhammond@gmail.com>
Date: Sun, 20 Nov 2022 21:45:20 -0800
Subject: fix: enable crashpad for ELECTRON_RUN_AS_NODE linux processes
Passes the crashpad handler PID and crashdump signal file descriptor
to child processes spawned with `ELECTRON_RUN_AS_NODE` which is used
by the crashpad client to connect with the handler process.
diff --git a/lib/child_process.js b/lib/child_process.js
index 1bc5f92181a48e1ee37e59220ad11a755b20c9f4..d9d6a39f113151a489a3521ca8512f8ea5b1843c 100644
--- a/lib/child_process.js
+++ b/lib/child_process.js
@@ -60,6 +60,7 @@ let debug = require('internal/util/debuglog').debuglog(
);
const { Buffer } = require('buffer');
const { Pipe, constants: PipeConstants } = internalBinding('pipe_wrap');
+const { getCrashdumpSignalFD, getCrashpadHandlerPID } = process._linkedBinding('electron_common_crashpad_support');
const {
AbortError,
@@ -163,7 +164,6 @@ function fork(modulePath, args = [], options) {
ArrayPrototypeSplice(execArgv, index - 1, 2);
}
}
-
args = [...execArgv, modulePath, ...args];
if (typeof options.stdio === 'string') {
@@ -625,6 +625,21 @@ function normalizeSpawnArguments(file, args, options) {
'options.windowsVerbatimArguments');
}
+ if (process.platform === 'linux') {
+ if (ObjectPrototypeHasOwnProperty(options.env || process.env, 'ELECTRON_RUN_AS_NODE') &&
+ (file === process.execPath)) {
+ // On Linux, pass the file descriptor which crashpad handler process
+ // uses to monitor the child process and PID of the handler process.
+ // https://source.chromium.org/chromium/chromium/src/+/110.0.5415.0:components/crash/core/app/crashpad_linux.cc;l=199-206
+ const fd = getCrashdumpSignalFD();
+ const pid = getCrashpadHandlerPID();
+ if (fd !== -1 && pid !== -1) {
+ options.env.CRASHDUMP_SIGNAL_FD = fd;
+ options.env.CRASHPAD_HANDLER_PID = pid;
+ }
+ }
+ }
+
if (options.shell) {
validateArgumentNullCheck(options.shell, 'options.shell');
const command = ArrayPrototypeJoin([file, ...args], ' ');