| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -6,10 +6,14 @@ const { | |||
| 6 | 6 | ArrayPrototypeSome, | |
| 7 | 7 | ObjectKeys, | |
| 8 | 8 | ObjectValues, | |
| 9 | - RegExpPrototypeExec, | ||
| 10 | 9 | SafeMap, | |
| 11 | 10 | StringPrototypeStartsWith, | |
| 12 | 11 | } = primordials; | |
| 12 | + const { | ||
| 13 | + codes: { | ||
| 14 | + ERR_SOCKET_BAD_PORT, | ||
| 15 | + } | ||
| 16 | + } = require('internal/errors'); | ||
| 13 | 17 | ||
| 14 | 18 | const assert = require('internal/assert'); | |
| 15 | 19 | const { fork } = require('child_process'); | |
@@ -18,14 +22,12 @@ const EventEmitter = require('events'); | |||
| 18 | 22 | const RoundRobinHandle = require('internal/cluster/round_robin_handle'); | |
| 19 | 23 | const SharedHandle = require('internal/cluster/shared_handle'); | |
| 20 | 24 | const Worker = require('internal/cluster/worker'); | |
| 25 | + const { getInspectPort, isUsingInspector } = require('internal/util/inspector'); | ||
| 21 | 26 | const { internal, sendHelper } = require('internal/cluster/utils'); | |
| 22 | 27 | const cluster = new EventEmitter(); | |
| 23 | 28 | const intercom = new EventEmitter(); | |
| 24 | 29 | const SCHED_NONE = 1; | |
| 25 | 30 | const SCHED_RR = 2; | |
| 26 | - const minPort = 1024; | ||
| 27 | - const maxPort = 65535; | ||
| 28 | - const { validatePort } = require('internal/validators'); | ||
| 29 | 31 | ||
| 30 | 32 | module.exports = cluster; | |
| 31 | 33 | ||
@@ -40,7 +42,6 @@ cluster.SCHED_NONE = SCHED_NONE; // Leave it to the operating system. | |||
| 40 | 42 | cluster.SCHED_RR = SCHED_RR; // Primary distributes connections. | |
| 41 | 43 | ||
| 42 | 44 | let ids = 0; | |
| 43 | - let debugPortOffset = 1; | ||
| 44 | 45 | let initialized = false; | |
| 45 | 46 | ||
| 46 | 47 | // XXX(bnoordhuis) Fold cluster.schedulingPolicy into cluster.settings? | |
@@ -117,29 +118,12 @@ function setupSettingsNT(settings) { | |||
| 117 | 118 | function createWorkerProcess(id, env) { | |
| 118 | 119 | const workerEnv = { ...process.env, ...env, NODE_UNIQUE_ID: `${id}` }; | |
| 119 | 120 | const execArgv = [...cluster.settings.execArgv]; | |
| 120 | - const debugArgRegex = /--inspect(?:-brk|-port)?|--debug-port/; | ||
| 121 | - const nodeOptions = process.env.NODE_OPTIONS || ''; | ||
| 122 | - | ||
| 123 | - // TODO(MoLow): Use getInspectPort from internal/util/inspector | ||
| 124 | - if (ArrayPrototypeSome(execArgv, | ||
| 125 | - (arg) => RegExpPrototypeExec(debugArgRegex, arg) !== null) || | ||
| 126 | - RegExpPrototypeExec(debugArgRegex, nodeOptions) !== null) { | ||
| 127 | - let inspectPort; | ||
| 128 | - if ('inspectPort' in cluster.settings) { | ||
| 129 | - if (typeof cluster.settings.inspectPort === 'function') | ||
| 130 | - inspectPort = cluster.settings.inspectPort(); | ||
| 131 | - else | ||
| 132 | - inspectPort = cluster.settings.inspectPort; | ||
| 133 | - | ||
| 134 | - validatePort(inspectPort); | ||
| 135 | - } else { | ||
| 136 | - inspectPort = process.debugPort + debugPortOffset; | ||
| 137 | - if (inspectPort > maxPort) | ||
| 138 | - inspectPort = inspectPort - maxPort + minPort - 1; | ||
| 139 | - debugPortOffset++; | ||
| 140 | - } | ||
| 141 | 121 | ||
| 142 | - ArrayPrototypePush(execArgv, `--inspect-port=${inspectPort}`); | ||
| 122 | + if (cluster.settings.inspectPort === null) { | ||
| 123 | + throw new ERR_SOCKET_BAD_PORT('Port', null, true); | ||
| 124 | + } | ||
| 125 | + if (isUsingInspector(cluster.settings.execArgv)) { | ||
| 126 | + ArrayPrototypePush(execArgv, `--inspect-port=${getInspectPort(cluster.settings.inspectPort)}`); | ||
| 143 | 127 | } | |
| 144 | 128 | ||
| 145 | 129 | return fork(cluster.settings.exec, cluster.settings.args, { | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -8,6 +8,7 @@ const { | |||
| 8 | 8 | ObjectKeys, | |
| 9 | 9 | ObjectPrototypeHasOwnProperty, | |
| 10 | 10 | RegExpPrototypeExec, | |
| 11 | + SafeWeakMap, | ||
| 11 | 12 | } = primordials; | |
| 12 | 13 | ||
| 13 | 14 | const { validatePort } = require('internal/validators'); | |
@@ -17,19 +18,18 @@ const kMaxPort = 65535; | |||
| 17 | 18 | const kInspectArgRegex = /--inspect(?:-brk|-port)?|--debug-port/; | |
| 18 | 19 | const kInspectMsgRegex = /Debugger listening on ws:\/\/\[?(.+?)\]?:(\d+)\/|Debugger attached|Waiting for the debugger to disconnect\.\.\./; | |
| 19 | 20 | ||
| 20 | - let _isUsingInspector; | ||
| 21 | - function isUsingInspector() { | ||
| 22 | - _isUsingInspector ??= | ||
| 23 | - ArrayPrototypeSome(process.execArgv, (arg) => RegExpPrototypeExec(kInspectArgRegex, arg) !== null) || | ||
| 24 | - RegExpPrototypeExec(kInspectArgRegex, process.env.NODE_OPTIONS) !== null; | ||
| 25 | - return _isUsingInspector; | ||
| 21 | + const _isUsingInspector = new SafeWeakMap(); | ||
| 22 | + function isUsingInspector(execArgv = process.execArgv) { | ||
| 23 | + if (!_isUsingInspector.has(execArgv)) { | ||
| 24 | + _isUsingInspector.set(execArgv, | ||
| 25 | + ArrayPrototypeSome(execArgv, (arg) => RegExpPrototypeExec(kInspectArgRegex, arg) !== null) || | ||
| 26 | + RegExpPrototypeExec(kInspectArgRegex, process.env.NODE_OPTIONS) !== null); | ||
| 27 | + } | ||
| 28 | + return _isUsingInspector.get(execArgv); | ||
| 26 | 29 | } | |
| 27 | 30 | ||
| 28 | 31 | let debugPortOffset = 1; | |
| 29 | 32 | function getInspectPort(inspectPort) { | |
| 30 | - if (!isUsingInspector()) { | ||
| 31 | - return null; | ||
| 32 | - } | ||
| 33 | 33 | if (typeof inspectPort === 'function') { | |
| 34 | 34 | inspectPort = inspectPort(); | |
| 35 | 35 | } else if (inspectPort == null) { | |
| Back | FazBrowse Home | New Git URL |
0 commit comments