%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream
// Flags: --inspect=0 'use strict'; const common = require('../common'); common.skipIfInspectorDisabled(); common.skipIfWorker(); // Assert that even when started with `--inspect=0` workers are assigned // consecutive (i.e. deterministically predictable) debug ports const assert = require('assert'); const cluster = require('cluster'); function serialFork() { return new Promise((res) => { const worker = cluster.fork(); worker.on('exit', common.mustCall((code, signal) => { // code 0 is normal // code 12 can happen if inspector could not bind because of a port clash if (code !== 0 && code !== 12) assert.fail(`code: ${code}, signal: ${signal}`); const port = worker.process.spawnargs .map((a) => (/=(?:.*:)?(\d{2,5})$/.exec(a) || [])[1]) .filter((p) => p) .pop(); res(Number(port)); })); }); } if (cluster.isPrimary) { Promise.all([serialFork(), serialFork(), serialFork()]) .then(common.mustCall((ports) => { ports.splice(0, 0, process.debugPort); // 4 = [primary, worker1, worker2, worker3].length() assert.strictEqual(ports.length, 4); assert(ports.every((port) => port > 0)); assert(ports.every((port) => port < 65536)); assert.strictEqual(ports[0] === 65535 ? 1024 : ports[0] + 1, ports[1]); assert.strictEqual(ports[1] === 65535 ? 1024 : ports[1] + 1, ports[2]); assert.strictEqual(ports[2] === 65535 ? 1024 : ports[2] + 1, ports[3]); })) .catch( (err) => { console.error(err); process.exit(1); }); } else { process.exit(0); }