|
1 | 1 | 'use strict'; |
| 2 | + |
| 3 | +// Test should fail in Node.js 5.4.1 and pass in later versions. |
| 4 | + |
2 | 5 | const common = require('../common'); |
3 | 6 | const assert = require('assert'); |
4 | 7 | const cluster = require('cluster'); |
5 | | -const os = require('os'); |
6 | 8 |
|
7 | 9 | if (cluster.isMaster) { |
8 | | - function forkWorker(action) { |
9 | | - const worker = cluster.fork({ action }); |
10 | | - worker.on('disconnect', common.mustCall(() => { |
11 | | - assert.strictEqual(worker.suicide, true); |
12 | | - })); |
| 10 | + cluster.on('exit', (worker, code) => { |
| 11 | + assert.strictEqual(code, 0, 'worker exited with error'); |
| 12 | + }); |
| 13 | + |
| 14 | + return cluster.fork(); |
| 15 | +} |
13 | 16 |
|
14 | | - worker.on('exit', common.mustCall(() => { |
15 | | - assert.strictEqual(worker.suicide, true); |
16 | | - })); |
17 | | - } |
| 17 | +var eventFired = false; |
18 | 18 |
|
19 | | - const cpus = os.cpus().length; |
20 | | - const tries = cpus > 8 ? 64 : cpus * 8; |
| 19 | +cluster.worker.disconnect(); |
21 | 20 |
|
22 | | - cluster.on('exit', common.mustCall((worker, code) => { |
23 | | - assert.strictEqual(code, 0, 'worker exited with error'); |
24 | | - }, tries * 2)); |
25 | | - |
26 | | - for (let i = 0; i < tries; ++i) { |
27 | | - forkWorker('disconnect'); |
28 | | - forkWorker('kill'); |
29 | | - } |
30 | | -} else { |
31 | | - cluster.worker[process.env.action](); |
32 | | -} |
| 21 | +process.nextTick(common.mustCall(() => { |
| 22 | + assert.strictEqual(eventFired, false, 'disconnect event should wait for ack'); |
| 23 | +})); |
| 24 | + |
| 25 | +cluster.worker.on('disconnect', common.mustCall(() => { |
| 26 | + eventFired = true; |
| 27 | +})); |
0 commit comments