mirror of
https://github.com/nodejs/node.git
synced 2025-05-08 16:29:55 +00:00

This patch splits the handling of `isMainThread` and `ownsProcessState` from conditionals in `lib/internal/bootstrap/node.js` into different scripts under `lib/internal/bootstrap/switches/`, and call them accordingly from C++ after `node.js` is run. This: - Creates a common denominator of the main thread and the worker thread bootstrap that can be snapshotted and shared by both. - Makes it possible to override the configurations on-the-fly. PR-URL: https://github.com/nodejs/node/pull/30862 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
69 lines
1.8 KiB
JavaScript
69 lines
1.8 KiB
JavaScript
'use strict';
|
|
|
|
const { ObjectDefineProperty } = primordials;
|
|
const rawMethods = internalBinding('process_methods');
|
|
const {
|
|
unavailable
|
|
} = require('internal/process/worker_thread_only');
|
|
|
|
process.abort = unavailable('process.abort()');
|
|
process.chdir = unavailable('process.chdir()');
|
|
process.umask = wrappedUmask;
|
|
process.cwd = rawMethods.cwd;
|
|
|
|
delete process._debugProcess;
|
|
delete process._debugEnd;
|
|
delete process._startProfilerIdleNotifier;
|
|
delete process._stopProfilerIdleNotifier;
|
|
|
|
function defineStream(name, getter) {
|
|
ObjectDefineProperty(process, name, {
|
|
configurable: true,
|
|
enumerable: true,
|
|
get: getter
|
|
});
|
|
}
|
|
|
|
defineStream('stdout', getStdout);
|
|
defineStream('stdin', getStdin);
|
|
defineStream('stderr', getStderr);
|
|
|
|
// Worker threads don't receive signals.
|
|
const {
|
|
startListeningIfSignal,
|
|
stopListeningIfSignal
|
|
} = require('internal/process/signal');
|
|
process.removeListener('newListener', startListeningIfSignal);
|
|
process.removeListener('removeListener', stopListeningIfSignal);
|
|
|
|
// ---- keep the attachment of the wrappers above so that it's easier to ----
|
|
// ---- compare the setups side-by-side -----
|
|
|
|
const {
|
|
createWorkerStdio
|
|
} = require('internal/worker/io');
|
|
const {
|
|
codes: { ERR_WORKER_UNSUPPORTED_OPERATION }
|
|
} = require('internal/errors');
|
|
|
|
let workerStdio;
|
|
function lazyWorkerStdio() {
|
|
if (!workerStdio) workerStdio = createWorkerStdio();
|
|
return workerStdio;
|
|
}
|
|
|
|
function getStdout() { return lazyWorkerStdio().stdout; }
|
|
|
|
function getStderr() { return lazyWorkerStdio().stderr; }
|
|
|
|
function getStdin() { return lazyWorkerStdio().stdin; }
|
|
|
|
function wrappedUmask(mask) {
|
|
// process.umask() is a read-only operation in workers.
|
|
if (mask !== undefined) {
|
|
throw new ERR_WORKER_UNSUPPORTED_OPERATION('Setting process.umask()');
|
|
}
|
|
|
|
return rawMethods.umask(mask);
|
|
}
|