Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions lib/async_hooks.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ const AsyncContextFrame = require('internal/async_context_frame');
// Get functions
// For userland AsyncResources, make sure to emit a destroy event when the
// resource gets gced.
const { registerDestroyHook } = internal_async_hooks;
const { registerDestroyHook, kNoPromiseHook } = internal_async_hooks;
const {
asyncWrap,
executionAsyncId,
Expand Down Expand Up @@ -90,6 +90,7 @@ class AsyncHook {
this[after_symbol] = after;
this[destroy_symbol] = destroy;
this[promise_resolve_symbol] = promiseResolve;
this[kNoPromiseHook] = false;
}

enable() {
Expand Down Expand Up @@ -120,7 +121,9 @@ class AsyncHook {
enableHooks();
}

updatePromiseHookMode();
if (!this[kNoPromiseHook]) {
updatePromiseHookMode();
}

return this;
}
Expand Down
15 changes: 3 additions & 12 deletions lib/internal/inspector_async_hook.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
'use strict';

const {
SafeSet,

Check failure on line 4 in lib/internal/inspector_async_hook.js

View workflow job for this annotation

GitHub Actions / lint-js-and-md

'SafeSet' is assigned a value but never used
} = primordials;

let hook;
Expand All @@ -11,6 +11,7 @@
const inspector = internalBinding('inspector');
const { createHook } = require('async_hooks');
config = internalBinding('config');
const { kNoPromiseHook } = require('internal/async_hooks');

hook = createHook({
init(asyncId, type, triggerAsyncId, resource) {
Expand All @@ -19,32 +20,22 @@
// in https://github.com/nodejs/node/pull/13870#discussion_r124515293,
// this should be fine as long as we call asyncTaskCanceled() too.
const recurring = true;
if (type === 'PROMISE')
this.promiseIds.add(asyncId);
else
inspector.asyncTaskScheduled(type, asyncId, recurring);
inspector.asyncTaskScheduled(type, asyncId, recurring);
},

before(asyncId) {
if (this.promiseIds.has(asyncId))
return;
inspector.asyncTaskStarted(asyncId);
},

after(asyncId) {
if (this.promiseIds.has(asyncId))
return;
inspector.asyncTaskFinished(asyncId);
},

destroy(asyncId) {
if (this.promiseIds.has(asyncId))
return this.promiseIds.delete(asyncId);
inspector.asyncTaskCanceled(asyncId);
},
});

hook.promiseIds = new SafeSet();
hook[kNoPromiseHook] = true;
}

function enable() {
Expand Down
2 changes: 1 addition & 1 deletion test/parallel/test-inspector-async-call-stack.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ function verifyAsyncHookEnabled(message) {
assert.strictEqual(async_hook_fields[kTotals], 4,
`${async_hook_fields[kTotals]} !== 4: ${message}`);
const promiseHooks = getPromiseHooks();
assert.notDeepStrictEqual(
assert.deepStrictEqual( // Inspector async hooks should not enable promise hooks
promiseHooks, emptyPromiseHooks,
`${message}: promise hooks ${inspect(promiseHooks)}`
);
Expand Down
Loading