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 <refack@gmail.com>
Reviewed-By: Andreas Madsen <amwebdk@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Trevor Norris <trev.norris@gmail.com>
This commit is contained in:
Anna Henningsen 2017-06-02 23:49:55 +02:00
parent d0571a926a
commit 6318078d2c
No known key found for this signature in database
GPG Key ID: D8B9F5AEAE84E4CF
2 changed files with 22 additions and 2 deletions

View File

@ -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];

View File

@ -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);