Cannot construct new Buffer in worker thread after transferring buffer out

After transferring a Buffer instance to a different thread, it becomes impossible to construct new Buffers in the current thread.

  • Version: v12.16.2
  • Platform: win10 x64
  • Subsystem: buffer, worker_threads

What steps will reproduce the bug?

var worker_threads = require('worker_threads');

if (worker_threads.isMainThread) {
	var worker = new worker_threads.Worker(__filename);

	worker.on('message', function(msg) {
		console.log(msg);
	});
	
} else {
	
	try {
		sendBuf(Buffer.from('hello world'));
		sendBuf(Buffer.from('hello world'));
	} catch (ex) {
		console.error(ex);
	}


}

function sendBuf(buf) {
	worker_threads.parentPort.postMessage({
		buf: buf
	}, [ buf.buffer ]);
}

What is the expected behavior?

It should not crash node

What do you see instead?

{
  buf: Uint8Array(11) [
    104, 101, 108, 108,
    111,  32, 119, 111,
    114, 108, 100
  ]
}
TypeError: Cannot perform Construct on a neutered ArrayBuffer
    at new Uint8Array (<anonymous>)
    at new FastBuffer (internal/buffer.js:945:1)
    at fromStringFast (buffer.js:427:11)
    at fromString (buffer.js:452:10)
    at Function.from (buffer.js:302:12)
    at Object.<anonymous> (/worker-test.js:14:18)
    at Module._compile (internal/modules/cjs/loader.js:1156:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1176:10)
    at Module.load (internal/modules/cjs/loader.js:1000:32)
    at Function.Module._load (internal/modules/cjs/loader.js:899:14)

It looks like after the first Buffer is transferred out, the allocPool contains a now-neutered ArrayBuffer.

If I call createPool() before

let b = new FastBuffer(allocPool, poolOffset, length);

then the operation succeeds.