33// This file is invoked by `node::RunBootstrapping()` in `src/node.cc`, and is
44// responsible for setting up node.js core before executing main scripts
55// under `lib/internal/main/`.
6- // This file is currently run to bootstrap both the main thread and the worker
7- // threads. Some setups are conditional, controlled with isMainThread and
8- // ownsProcessState.
6+ //
97// This file is expected not to perform any asynchronous operations itself
108// when being executed - those should be done in either
119// `lib/internal/bootstrap/pre_execution.js` or in main scripts. The majority
2220// module loaders, including `process.binding()`, `process._linkedBinding()`,
2321// `internalBinding()` and `NativeModule`.
2422//
25- // After this file is run, one of the main scripts under `lib/internal/main/`
26- // will be selected by C++ to start the actual execution. The main scripts may
27- // run additional setups exported by `lib/internal/bootstrap/pre_execution.js`,
28- // depending on the execution mode.
23+ // This file is run to bootstrap both the main thread and the worker threads.
24+ // After this file is run, certain properties are setup according to the
25+ // configuration of the Node.js instance using the files in
26+ // `lib/internal/bootstrap/switches/`.
27+ //
28+ // Then, depending on how the Node.js instance is launched, one of the main
29+ // scripts in `lib/internal/main` will be selected by C++ to start the actual
30+ // execution. They may run additional setups exported by
31+ // `lib/internal/bootstrap/pre_execution.js` depending on the runtime states.
2932
3033'use strict' ;
3134
3235// This file is compiled as if it's wrapped in a function with arguments
3336// passed by node::RunBootstrapping()
34- /* global process, require, internalBinding, isMainThread, ownsProcessState */
37+ /* global process, require, internalBinding */
3538
3639setupPrepareStackTrace ( ) ;
3740
@@ -54,48 +57,12 @@ setupBuffer();
5457process . domain = null ;
5558process . _exiting = false ;
5659
57- // Bootstrappers for all threads, including worker threads and main thread
58- const perThreadSetup = require ( 'internal/process/per_thread' ) ;
59- // Bootstrappers for the main thread only
60- let mainThreadSetup ;
61- // Bootstrappers for the worker threads only
62- let workerThreadSetup ;
63- if ( ownsProcessState ) {
64- mainThreadSetup = require (
65- 'internal/process/main_thread_only'
66- ) ;
67- } else {
68- workerThreadSetup = require (
69- 'internal/process/worker_thread_only'
70- ) ;
71- }
72-
7360// process.config is serialized config.gypi
7461process . config = JSONParse ( internalBinding ( 'native_module' ) . config ) ;
7562
63+ // Bootstrappers for all threads, including worker threads and main thread
64+ const perThreadSetup = require ( 'internal/process/per_thread' ) ;
7665const rawMethods = internalBinding ( 'process_methods' ) ;
77- // Set up methods and events on the process object for the main thread
78- if ( isMainThread ) {
79- process . abort = rawMethods . abort ;
80- const wrapped = mainThreadSetup . wrapProcessMethods ( rawMethods ) ;
81- process . umask = wrapped . umask ;
82- process . chdir = wrapped . chdir ;
83- process . cwd = wrapped . cwd ;
84-
85- // TODO(joyeecheung): deprecate and remove these underscore methods
86- process . _debugProcess = rawMethods . _debugProcess ;
87- process . _debugEnd = rawMethods . _debugEnd ;
88- process . _startProfilerIdleNotifier =
89- rawMethods . _startProfilerIdleNotifier ;
90- process . _stopProfilerIdleNotifier = rawMethods . _stopProfilerIdleNotifier ;
91- } else {
92- const wrapped = workerThreadSetup . wrapProcessMethods ( rawMethods ) ;
93-
94- process . abort = workerThreadSetup . unavailable ( 'process.abort()' ) ;
95- process . chdir = workerThreadSetup . unavailable ( 'process.chdir()' ) ;
96- process . umask = wrapped . umask ;
97- process . cwd = rawMethods . cwd ;
98- }
9966
10067// Set up methods on the process object for all threads
10168{
@@ -119,6 +86,11 @@ if (isMainThread) {
11986 process . memoryUsage = wrapped . memoryUsage ;
12087 process . kill = wrapped . kill ;
12188 process . exit = wrapped . exit ;
89+
90+ process . openStdin = function ( ) {
91+ process . stdin . resume ( ) ;
92+ return process . stdin ;
93+ } ;
12294}
12395
12496const credentials = internalBinding ( 'credentials' ) ;
@@ -128,34 +100,6 @@ if (credentials.implementsPosixCredentials) {
128100 process . getgid = credentials . getgid ;
129101 process . getegid = credentials . getegid ;
130102 process . getgroups = credentials . getgroups ;
131-
132- if ( ownsProcessState ) {
133- const wrapped = mainThreadSetup . wrapPosixCredentialSetters ( credentials ) ;
134- process . initgroups = wrapped . initgroups ;
135- process . setgroups = wrapped . setgroups ;
136- process . setegid = wrapped . setegid ;
137- process . seteuid = wrapped . seteuid ;
138- process . setgid = wrapped . setgid ;
139- process . setuid = wrapped . setuid ;
140- } else {
141- process . initgroups =
142- workerThreadSetup . unavailable ( 'process.initgroups()' ) ;
143- process . setgroups = workerThreadSetup . unavailable ( 'process.setgroups()' ) ;
144- process . setegid = workerThreadSetup . unavailable ( 'process.setegid()' ) ;
145- process . seteuid = workerThreadSetup . unavailable ( 'process.seteuid()' ) ;
146- process . setgid = workerThreadSetup . unavailable ( 'process.setgid()' ) ;
147- process . setuid = workerThreadSetup . unavailable ( 'process.setuid()' ) ;
148- }
149- }
150-
151- if ( isMainThread ) {
152- const { getStdout, getStdin, getStderr } =
153- require ( 'internal/process/stdio' ) . getMainThreadStdio ( ) ;
154- setupProcessStdio ( getStdout , getStdin , getStderr ) ;
155- } else {
156- const { getStdout, getStdin, getStderr } =
157- workerThreadSetup . createStdioGetters ( ) ;
158- setupProcessStdio ( getStdout , getStdin , getStderr ) ;
159103}
160104
161105// Setup the callbacks that node::AsyncWrap will call when there are hooks to
@@ -343,31 +287,6 @@ function setupProcessObject() {
343287 } ) ;
344288}
345289
346- function setupProcessStdio ( getStdout , getStdin , getStderr ) {
347- ObjectDefineProperty ( process , 'stdout' , {
348- configurable : true ,
349- enumerable : true ,
350- get : getStdout
351- } ) ;
352-
353- ObjectDefineProperty ( process , 'stderr' , {
354- configurable : true ,
355- enumerable : true ,
356- get : getStderr
357- } ) ;
358-
359- ObjectDefineProperty ( process , 'stdin' , {
360- configurable : true ,
361- enumerable : true ,
362- get : getStdin
363- } ) ;
364-
365- process . openStdin = function ( ) {
366- process . stdin . resume ( ) ;
367- return process . stdin ;
368- } ;
369- }
370-
371290function setupGlobalProxy ( ) {
372291 ObjectDefineProperty ( global , SymbolToStringTag , {
373292 value : 'global' ,
0 commit comments