mirror of
https://github.com/nodejs/node.git
synced 2024-12-01 16:10:02 +01:00
9d064439e5
AsyncResource.emitBefore and AsyncResource.emitAfter have been deprecated in https://github.com/nodejs/node/pull/18632. This PR removes it all. This commit also updates some embedder tests to use internal APIs. The conditions are still possible for Node.js core developers but not for end users. PR-URL: https://github.com/nodejs/node/pull/26530 Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Ali Ijaz Sheikh <ofrobots@google.com> Reviewed-By: Benedikt Meurer <benedikt.meurer@gmail.com> Reviewed-By: Yang Guo <yangguo@chromium.org> Reviewed-By: Andreas Madsen <amwebdk@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
68 lines
2.1 KiB
JavaScript
68 lines
2.1 KiB
JavaScript
// Flags: --expose-internals
|
|
'use strict';
|
|
|
|
const common = require('../common');
|
|
const assert = require('assert');
|
|
const internal_async_hooks = require('internal/async_hooks');
|
|
const { spawn } = require('child_process');
|
|
const corruptedMsg = /async hook stack has become corrupted/;
|
|
const heartbeatMsg = /heartbeat: still alive/;
|
|
|
|
const {
|
|
newAsyncId, getDefaultTriggerAsyncId,
|
|
emitInit, emitBefore, emitAfter
|
|
} = internal_async_hooks;
|
|
|
|
const initHooks = require('./init-hooks');
|
|
|
|
if (process.argv[2] === 'child') {
|
|
const hooks = initHooks();
|
|
hooks.enable();
|
|
|
|
// In both the below two cases 'before' of event2 is nested inside 'before'
|
|
// of event1.
|
|
// Therefore the 'after' of event2 needs to occur before the
|
|
// 'after' of event 1.
|
|
// The first test of the two below follows that rule,
|
|
// the second one doesn't.
|
|
|
|
const eventOneId = newAsyncId();
|
|
const eventTwoId = newAsyncId();
|
|
const triggerId = getDefaultTriggerAsyncId();
|
|
emitInit(eventOneId, 'event1', triggerId, {});
|
|
emitInit(eventTwoId, 'event2', triggerId, {});
|
|
|
|
// Proper unwind
|
|
emitBefore(eventOneId, triggerId);
|
|
emitBefore(eventTwoId, triggerId);
|
|
emitAfter(eventTwoId);
|
|
emitAfter(eventOneId);
|
|
|
|
// Improper unwind
|
|
emitBefore(eventOneId, triggerId);
|
|
emitBefore(eventTwoId, triggerId);
|
|
|
|
console.log('heartbeat: still alive');
|
|
emitAfter(eventOneId);
|
|
} else {
|
|
const args = ['--expose-internals']
|
|
.concat(process.argv.slice(1))
|
|
.concat('child');
|
|
let errData = Buffer.from('');
|
|
let outData = Buffer.from('');
|
|
|
|
const child = spawn(process.execPath, args);
|
|
child.stderr.on('data', (d) => { errData = Buffer.concat([ errData, d ]); });
|
|
child.stdout.on('data', (d) => { outData = Buffer.concat([ outData, d ]); });
|
|
|
|
child.on('close', common.mustCall((code) => {
|
|
assert.strictEqual(code, 1);
|
|
assert.ok(heartbeatMsg.test(outData.toString()),
|
|
'did not crash until we reached offending line of code ' +
|
|
`(found ${outData})`);
|
|
assert.ok(corruptedMsg.test(errData.toString()),
|
|
'printed error contains corrupted message ' +
|
|
`(found ${errData})`);
|
|
}));
|
|
}
|