mirror of
https://github.com/nodejs/node.git
synced 2025-05-08 20:09:07 +00:00

Keep a reference to the `ArrayBuffer::Allocator` alive for at least as long as a `SharedArrayBuffer` allocated by it lives. Refs: https://github.com/nodejs/node/pull/28788 Fixes: https://github.com/nodejs/node/issues/28777 Fixes: https://github.com/nodejs/node/issues/28773 PR-URL: https://github.com/nodejs/node/pull/29190 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
23 lines
795 B
JavaScript
23 lines
795 B
JavaScript
'use strict';
|
|
const common = require('../common');
|
|
const assert = require('assert');
|
|
const { Worker } = require('worker_threads');
|
|
|
|
// Regression test for https://github.com/nodejs/node/issues/28777
|
|
// Make sure that SharedArrayBuffers created in Worker threads are accessible
|
|
// after the creating thread ended.
|
|
|
|
const w = new Worker(`
|
|
const { parentPort } = require('worker_threads');
|
|
const sharedArrayBuffer = new SharedArrayBuffer(4);
|
|
parentPort.postMessage(sharedArrayBuffer);
|
|
`, { eval: true });
|
|
|
|
let sharedArrayBuffer;
|
|
w.once('message', common.mustCall((message) => sharedArrayBuffer = message));
|
|
w.once('exit', common.mustCall(() => {
|
|
const uint8array = new Uint8Array(sharedArrayBuffer);
|
|
uint8array[0] = 42;
|
|
assert.deepStrictEqual(uint8array, new Uint8Array([42, 0, 0, 0]));
|
|
}));
|