diff --git a/lib/async_hooks.js b/lib/async_hooks.js index aec73ed770f069..d343a0e3de3821 100644 --- a/lib/async_hooks.js +++ b/lib/async_hooks.js @@ -96,7 +96,7 @@ class AsyncHook { // Each hook is only allowed to be added once. if (hooks_array.includes(this)) - return; + return this; if (!setupHooksCalled) { setupHooksCalled = true; @@ -124,7 +124,7 @@ class AsyncHook { const index = hooks_array.indexOf(this); if (index === -1) - return; + return this; hook_fields[kInit] -= +!!this[init_symbol]; hook_fields[kBefore] -= +!!this[before_symbol]; diff --git a/test/parallel/test-async-hooks-enable-disable.js b/test/parallel/test-async-hooks-enable-disable.js new file mode 100644 index 00000000000000..b685c7123454dd --- /dev/null +++ b/test/parallel/test-async-hooks-enable-disable.js @@ -0,0 +1,20 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const async_hooks = require('async_hooks'); + +const hook = async_hooks.createHook({ + init: common.mustCall(() => {}, 1), + before: common.mustNotCall(), + after: common.mustNotCall(), + destroy: common.mustNotCall() +}); + +assert.strictEqual(hook.enable(), hook); +assert.strictEqual(hook.enable(), hook); + +setImmediate(common.mustCall()); + +assert.strictEqual(hook.disable(), hook); +assert.strictEqual(hook.disable(), hook); +assert.strictEqual(hook.disable(), hook);