From bf61d977423c3c39dd2b37a97f71f63983d4aa0e Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Fri, 2 Jun 2017 23:49:55 +0200 Subject: [PATCH] async_hooks: make sure `.{en|dis}able() === this` Make sure that `hook.enable()` and `hook.disable()` return `hook` consistently, as the documentation indicates. PR-URL: https://github.com/nodejs/node/pull/13418 Reviewed-By: Refael Ackermann Reviewed-By: Andreas Madsen Reviewed-By: James M Snell Reviewed-By: Colin Ihrig Reviewed-By: Trevor Norris --- lib/async_hooks.js | 4 ++-- .../test-async-hooks-enable-disable.js | 20 +++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 test/parallel/test-async-hooks-enable-disable.js 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);