2019-02-15 18:48:56 +08:00
|
|
|
'use strict';
|
|
|
|
const common = require('../../common');
|
|
|
|
const assert = require('assert');
|
|
|
|
const { Worker, isMainThread, workerData } = require('worker_threads');
|
|
|
|
|
|
|
|
if (isMainThread) {
|
2019-02-18 06:45:14 +08:00
|
|
|
// Load the addon in the main thread first.
|
|
|
|
// This checks that N-API addons can be loaded from multiple contexts
|
|
|
|
// when they are not loaded through NAPI_MODULE().
|
|
|
|
require(`./build/${common.buildType}/test_worker_terminate`);
|
|
|
|
|
2019-02-15 18:48:56 +08:00
|
|
|
const counter = new Int32Array(new SharedArrayBuffer(4));
|
|
|
|
const worker = new Worker(__filename, { workerData: { counter } });
|
|
|
|
worker.on('exit', common.mustCall(() => {
|
|
|
|
assert.strictEqual(counter[0], 1);
|
|
|
|
}));
|
|
|
|
worker.on('error', common.mustNotCall());
|
|
|
|
} else {
|
|
|
|
const { Test } = require(`./build/${common.buildType}/test_worker_terminate`);
|
|
|
|
|
|
|
|
const { counter } = workerData;
|
|
|
|
// Test() tries to call a function twice and asserts that the second call does
|
|
|
|
// not work because of a pending exception.
|
|
|
|
Test(() => {
|
|
|
|
Atomics.add(counter, 0, 1);
|
|
|
|
process.exit();
|
|
|
|
});
|
|
|
|
}
|