|  | 
| 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