async_hooks: make AsyncResource match emitInit
AsyncResource previously called emitInitNative. Since AsyncResource is just an abstraction on top of the emitEventScript functions, it should call emitInitScript instead. PR-URL: https://github.com/nodejs/node/pull/14152 Reviewed-By: Refael Ackermann <refack@gmail.com> Reviewed-By: Trevor Norris <trev.norris@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net>
This commit is contained in:
parent
628485ea01
commit
31417b6882
@ -207,28 +207,16 @@ function triggerAsyncId() {
|
|||||||
// Embedder API //
|
// Embedder API //
|
||||||
|
|
||||||
class AsyncResource {
|
class AsyncResource {
|
||||||
constructor(type, triggerAsyncId) {
|
constructor(type, triggerAsyncId = initTriggerId()) {
|
||||||
this[async_id_symbol] = ++async_uid_fields[kAsyncUidCntr];
|
// Unlike emitInitScript, AsyncResource doesn't supports null as the
|
||||||
// Read and reset the current kInitTriggerId so that when the constructor
|
// triggerAsyncId.
|
||||||
// finishes the kInitTriggerId field is always 0.
|
|
||||||
if (triggerAsyncId === undefined) {
|
|
||||||
triggerAsyncId = initTriggerId();
|
|
||||||
// If a triggerAsyncId was passed, any kInitTriggerId still must be null'd.
|
|
||||||
} else {
|
|
||||||
async_uid_fields[kInitTriggerId] = 0;
|
|
||||||
}
|
|
||||||
this[trigger_id_symbol] = triggerAsyncId;
|
|
||||||
|
|
||||||
if (typeof type !== 'string' || type.length <= 0)
|
|
||||||
throw new TypeError('type must be a string with length > 0');
|
|
||||||
if (!Number.isSafeInteger(triggerAsyncId) || triggerAsyncId < 0)
|
if (!Number.isSafeInteger(triggerAsyncId) || triggerAsyncId < 0)
|
||||||
throw new RangeError('triggerAsyncId must be an unsigned integer');
|
throw new RangeError('triggerAsyncId must be an unsigned integer');
|
||||||
|
|
||||||
// Return immediately if there's nothing to do.
|
this[async_id_symbol] = ++async_uid_fields[kAsyncUidCntr];
|
||||||
if (async_hook_fields[kInit] === 0)
|
this[trigger_id_symbol] = triggerAsyncId;
|
||||||
return;
|
|
||||||
|
|
||||||
emitInitNative(this[async_id_symbol], type, triggerAsyncId, this);
|
emitInitScript(this[async_id_symbol], type, this[trigger_id_symbol], this);
|
||||||
}
|
}
|
||||||
|
|
||||||
emitBefore() {
|
emitBefore() {
|
||||||
@ -323,6 +311,9 @@ function emitInitScript(asyncId, type, triggerAsyncId, resource) {
|
|||||||
// manually means that the embedder must have used initTriggerId().
|
// manually means that the embedder must have used initTriggerId().
|
||||||
if (triggerAsyncId === null) {
|
if (triggerAsyncId === null) {
|
||||||
triggerAsyncId = initTriggerId();
|
triggerAsyncId = initTriggerId();
|
||||||
|
} else {
|
||||||
|
// If a triggerAsyncId was passed, any kInitTriggerId still must be null'd.
|
||||||
|
async_uid_fields[kInitTriggerId] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(trevnorris): I'd prefer allowing these checks to not exist, or only
|
// TODO(trevnorris): I'd prefer allowing these checks to not exist, or only
|
||||||
|
@ -18,8 +18,8 @@ assert.throws(() => new AsyncResource('invalid_trigger_id', null),
|
|||||||
/^RangeError: triggerAsyncId must be an unsigned integer$/);
|
/^RangeError: triggerAsyncId must be an unsigned integer$/);
|
||||||
|
|
||||||
assert.strictEqual(
|
assert.strictEqual(
|
||||||
typeof new AsyncResource('default_trigger_id').triggerAsyncId(),
|
new AsyncResource('default_trigger_id').triggerAsyncId(),
|
||||||
'number'
|
async_hooks.executionAsyncId()
|
||||||
);
|
);
|
||||||
|
|
||||||
// create first custom event 'alcazares' with triggerAsyncId derived
|
// create first custom event 'alcazares' with triggerAsyncId derived
|
||||||
|
@ -4,7 +4,13 @@ require('../common');
|
|||||||
// This tests that AsyncResource throws an error if bad parameters are passed
|
// This tests that AsyncResource throws an error if bad parameters are passed
|
||||||
|
|
||||||
const assert = require('assert');
|
const assert = require('assert');
|
||||||
const AsyncResource = require('async_hooks').AsyncResource;
|
const async_hooks = require('async_hooks');
|
||||||
|
const { AsyncResource } = async_hooks;
|
||||||
|
|
||||||
|
// Setup init hook such parameters are validated
|
||||||
|
async_hooks.createHook({
|
||||||
|
init() {}
|
||||||
|
}).enable();
|
||||||
|
|
||||||
assert.throws(() => {
|
assert.throws(() => {
|
||||||
return new AsyncResource();
|
return new AsyncResource();
|
Loading…
x
Reference in New Issue
Block a user