| 'use strict'; |
| |
| const common = require('../common'); |
| const { |
| postMessageToThread, |
| workerData, |
| Worker, |
| } = require('node:worker_threads'); |
| const { rejects } = require('node:assert'); |
| |
| const memory = new SharedArrayBuffer(4); |
| |
| async function test() { |
| const worker = new Worker(__filename, { workerData: { memory, children: true } }); |
| const array = new Int32Array(memory); |
| |
| await rejects(common.mustCall(function() { |
| return postMessageToThread(worker.threadId, 0, common.platformTimeout(500)); |
| }), { |
| name: 'Error', |
| code: 'ERR_WORKER_MESSAGING_TIMEOUT', |
| }); |
| |
| Atomics.store(array, 0, 1); |
| Atomics.notify(array, 0); |
| } |
| |
| if (!workerData?.children) { |
| test(); |
| } else { |
| process.on('beforeExit', common.mustCall()); |
| |
| const array = new Int32Array(workerData.memory); |
| |
| // Starve this thread waiting for the status to be unlocked. |
| // This happens in the main thread AFTER the timeout. |
| Atomics.wait(array, 0, 0); |
| } |