| 'use strict'; |
| const common = require('../common'); |
| const assert = require('assert'); |
| const cp = require('child_process'); |
| const NUM_MESSAGES = 10; |
| const values = []; |
| |
| for (let i = 0; i < NUM_MESSAGES; ++i) { |
| values[i] = i; |
| } |
| |
| if (process.argv[2] === 'child') { |
| const received = values.map(() => { return false; }); |
| |
| process.on('uncaughtException', common.mustCall((err) => { |
| received[err] = true; |
| const done = received.every((element) => { return element === true; }); |
| |
| if (done) |
| process.disconnect(); |
| }, NUM_MESSAGES)); |
| |
| process.on('message', (msg) => { |
| // If messages are handled synchronously, throwing should break the IPC |
| // message processing. |
| throw msg; |
| }); |
| |
| process.send('ready'); |
| } else { |
| const child = cp.fork(__filename, ['child']); |
| |
| child.on('message', common.mustCall((msg) => { |
| assert.strictEqual(msg, 'ready'); |
| values.forEach((value) => { |
| child.send(value); |
| }); |
| })); |
| } |