| // Flags: --expose-gc |
| 'use strict'; |
| |
| const common = require('../common'); |
| const assert = require('assert'); |
| const { Worker } = require('worker_threads'); |
| |
| { |
| const sharedArrayBuffer = new SharedArrayBuffer(12); |
| const local = Buffer.from(sharedArrayBuffer); |
| |
| const w = new Worker(` |
| const { parentPort } = require('worker_threads'); |
| parentPort.on('message', ({ sharedArrayBuffer }) => { |
| const local = Buffer.from(sharedArrayBuffer); |
| local.write('world!', 6); |
| parentPort.postMessage('written!'); |
| }); |
| `, { eval: true }); |
| w.on('message', common.mustCall(() => { |
| assert.strictEqual(local.toString(), 'Hello world!'); |
| global.gc(); |
| w.terminate(); |
| })); |
| w.postMessage({ sharedArrayBuffer }); |
| // This would be a race condition if the memory regions were overlapping |
| local.write('Hello '); |
| } |