@@ -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, { |
|