mirror of
https://github.com/nodejs/node.git
synced 2024-11-24 12:10:08 +01:00
c45313b3ad
The refcount of the internal communication port is relevant for stdio, but the `port.unref()` call effectively resets any `.ref()` calls happening during stdio operations happening before it. Therefore, do the `.unref()` call before loading preload modules, which may cause stdio operations. Fixes: https://github.com/nodejs/node/issues/31777 PR-URL: https://github.com/nodejs/node/pull/33455 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: Juan José Arboleda <soyjuanarbol@gmail.com>
21 lines
673 B
JavaScript
21 lines
673 B
JavaScript
'use strict';
|
|
const common = require('../common');
|
|
const fixtures = require('../common/fixtures');
|
|
const { Worker } = require('worker_threads');
|
|
const assert = require('assert');
|
|
|
|
// Regression test for https://github.com/nodejs/node/issues/31777:
|
|
// stdio operations coming from preload modules should count towards the
|
|
// ref count of the internal communication port on the Worker side.
|
|
|
|
for (let i = 0; i < 10; i++) {
|
|
const w = new Worker('console.log("B");', {
|
|
execArgv: ['--require', fixtures.path('printA.js')],
|
|
eval: true,
|
|
stdout: true
|
|
});
|
|
w.on('exit', common.mustCall(() => {
|
|
assert.strictEqual(w.stdout.read().toString(), 'A\nB\n');
|
|
}));
|
|
}
|