mirror of
https://github.com/nodejs/node.git
synced 2025-05-02 22:31:35 +00:00

Allow generic iterables as transfer list arguments, as well as an options object with a `transfer` option, for web compatibility. PR-URL: https://github.com/nodejs/node/pull/29319 Refs: https://github.com/nodejs/node/pull/28033#discussion_r289964991 Reviewed-By: James M Snell <jasnell@gmail.com>
27 lines
788 B
JavaScript
27 lines
788 B
JavaScript
'use strict';
|
||
const common = require('../common');
|
||
|
||
const { parentPort, MessageChannel, Worker } = require('worker_threads');
|
||
|
||
// Do not use isMainThread so that this test itself can be run inside a Worker.
|
||
if (!process.env.HAS_STARTED_WORKER) {
|
||
process.env.HAS_STARTED_WORKER = 1;
|
||
const w = new Worker(__filename);
|
||
w.once('message', common.mustCall(() => {
|
||
w.once('message', common.mustNotCall());
|
||
setTimeout(() => w.terminate(), 100);
|
||
}));
|
||
} else {
|
||
const { port1 } = new MessageChannel();
|
||
|
||
parentPort.postMessage('ready');
|
||
|
||
// Make sure we don’t end up running JS after the infinite loop is broken.
|
||
port1.postMessage({}, {
|
||
transfer: (function*() { while (true); })()
|
||
});
|
||
|
||
parentPort.postMessage('UNREACHABLE');
|
||
process.kill(process.pid, 'SIGINT');
|
||
}
|