mirror of
https://github.com/nodejs/node.git
synced 2024-11-24 20:29:23 +01:00
586318aa9f
`MakeCallback` can return an empty `MaybeLocal<>` even if no exception has been generated, in particular, if we were already terminating the current thread *before* the `TryCatch` scope started, which meant it would not have an exception to report. PR-URL: https://github.com/nodejs/node/pull/26124 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
40 lines
1.1 KiB
JavaScript
40 lines
1.1 KiB
JavaScript
'use strict';
|
|
const common = require('../common');
|
|
if (!common.hasCrypto)
|
|
common.skip('missing crypto');
|
|
|
|
const assert = require('assert');
|
|
const http2 = require('http2');
|
|
const { Duplex } = require('stream');
|
|
const { Worker, workerData } = require('worker_threads');
|
|
|
|
// Tests the interaction between terminating a Worker thread and running
|
|
// the native SetImmediate queue, which may attempt to perform multiple
|
|
// calls into JS even though one already terminates the Worker.
|
|
|
|
if (!workerData) {
|
|
const counter = new Int32Array(new SharedArrayBuffer(4));
|
|
const worker = new Worker(__filename, { workerData: { counter } });
|
|
worker.on('exit', common.mustCall(() => {
|
|
assert.strictEqual(counter[0], 1);
|
|
}));
|
|
} else {
|
|
const { counter } = workerData;
|
|
|
|
// Start two HTTP/2 connections. This will trigger write()s call from inside
|
|
// the SetImmediate queue.
|
|
for (let i = 0; i < 2; i++) {
|
|
http2.connect('http://localhost', {
|
|
createConnection() {
|
|
return new Duplex({
|
|
write(chunk, enc, cb) {
|
|
Atomics.add(counter, 0, 1);
|
|
process.exit();
|
|
},
|
|
read() { }
|
|
});
|
|
}
|
|
});
|
|
}
|
|
}
|