process: setup signal handler in prepareMainThreadExecution

Because this is only necessary in the main thread.
Also removes the rearming of signal events since no
signal event handlers should be created during the execution
of node.js now that we've made the creation of stdout and stderr
streams lazy - this has been demonstrated in the test coverage.

PR-URL: https://github.com/nodejs/node/pull/26227
Reviewed-By: Richard Lau <riclau@uk.ibm.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
This commit is contained in:
Joyee Cheung 2019-02-10 19:28:16 +08:00 committed by Anna Henningsen
parent 7e0ddf66b9
commit 34470b0524
No known key found for this signature in database
GPG Key ID: 9C63F3A6CD2AD8F9
3 changed files with 25 additions and 22 deletions

View File

@ -282,36 +282,15 @@ if (process.env.NODE_V8_COVERAGE) {
};
}
// Worker threads don't receive signals.
if (isMainThread) {
const {
isSignal,
startListeningIfSignal,
stopListeningIfSignal
} = mainThreadSetup.createSignalHandlers();
process.on('newListener', startListeningIfSignal);
process.on('removeListener', stopListeningIfSignal);
// re-arm pre-existing signal event registrations
// with this signal wrap capabilities.
const signalEvents = process.eventNames().filter(isSignal);
for (const ev of signalEvents) {
process.emit('newListener', ev);
}
}
if (getOptionValue('--experimental-report')) {
const {
config,
handleSignal,
report,
syncConfig
} = NativeModule.require('internal/process/report');
process.report = report;
// Download the CLI / ENV config into JS land.
syncConfig(config, false);
if (config.events.includes('signal')) {
process.on(config.signal, handleSignal);
}
}
function setupProcessObject() {

View File

@ -8,6 +8,9 @@ let traceEventsAsyncHook;
function prepareMainThreadExecution() {
setupTraceCategoryState();
// Only main thread receives signals.
setupSignalHandlers();
// If the process is spawned with env NODE_CHANNEL_FD, it's probably
// spawned by our child_process module, then initialize IPC.
// This attaches some internal event listeners and creates:
@ -28,6 +31,28 @@ function prepareMainThreadExecution() {
loadPreloadModules();
}
function setupSignalHandlers() {
const {
createSignalHandlers
} = require('internal/process/main_thread_only');
const {
startListeningIfSignal,
stopListeningIfSignal
} = createSignalHandlers();
process.on('newListener', startListeningIfSignal);
process.on('removeListener', stopListeningIfSignal);
if (getOptionValue('--experimental-report')) {
const {
config,
handleSignal
} = require('internal/process/report');
if (config.events.includes('signal')) {
process.on(config.signal, handleSignal);
}
}
}
function setupTraceCategoryState() {
const {
asyncHooksEnabledInitial,

View File

@ -144,7 +144,6 @@ function createSignalHandlers() {
}
return {
isSignal,
startListeningIfSignal,
stopListeningIfSignal
};