// deno-fmt-ignore-file // deno-lint-ignore-file // Copyright Joyent and Node contributors. All rights reserved. MIT license. // Taken from Node 18.12.1 // This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually. 'use strict'; const common = require('../common'); const assert = require('assert'); const { MessageChannel } = require('worker_threads'); // Make sure that an infinite asynchronous .on('message')/postMessage loop // does not lead to a stack overflow and does not starve the event loop. // We schedule timeouts both from before the .on('message') handler and // inside of it, which both should run. const { port1, port2 } = new MessageChannel(); let count = 0; port1.on('message', () => { if (count === 0) { setTimeout(common.mustCall(() => { port1.close(); }), 0); } port2.postMessage(0); assert(count++ < 10000, `hit ${count} loop iterations`); }); port2.postMessage(0); // This is part of the test -- the event loop should be available and not stall // out due to the recursive .postMessage() calls. setTimeout(common.mustCall(), 0);