From 120f2e26f5af50d803fed9bad663cad37556b3a3 Mon Sep 17 00:00:00 2001 From: Ruben Bridgewater Date: Mon, 3 Jul 2017 14:16:12 +0200 Subject: [PATCH] async_hooks: move restoreTmpHooks call to init This fixes an error that could occure by nesting async_hooks calls --- lib/async_hooks.js | 10 +++++----- .../test-async-hooks-enable-recursive.js | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+), 5 deletions(-) create mode 100644 test/parallel/test-async-hooks-enable-recursive.js diff --git a/lib/async_hooks.js b/lib/async_hooks.js index a730738c0f9144..42d04f063081c2 100644 --- a/lib/async_hooks.js +++ b/lib/async_hooks.js @@ -335,11 +335,6 @@ function emitInitS(asyncId, type, triggerAsyncId, resource) { throw new RangeError('triggerAsyncId must be an unsigned integer'); init(asyncId, type, triggerAsyncId, resource); - - // Isn't null if hooks were added/removed while the hooks were running. - if (tmp_active_hooks_array !== null) { - restoreTmpHooks(); - } } function emitHookFactory(symbol, name) { @@ -442,6 +437,11 @@ function init(asyncId, type, triggerAsyncId, resource) { fatalError(e); } processing_hook = false; + + // Isn't null if hooks were added/removed while the hooks were running. + if (tmp_active_hooks_array !== null) { + restoreTmpHooks(); + } } diff --git a/test/parallel/test-async-hooks-enable-recursive.js b/test/parallel/test-async-hooks-enable-recursive.js new file mode 100644 index 00000000000000..64b35b69bf3ac3 --- /dev/null +++ b/test/parallel/test-async-hooks-enable-recursive.js @@ -0,0 +1,19 @@ +'use strict'; + +const common = require('../common'); +const async_hooks = require('async_hooks'); +const crypto = require('crypto'); + +const nestedHook = async_hooks.createHook({ + init: common.mustCall() +}); + +async_hooks.createHook({ + init: common.mustCall((id, type) => { + nestedHook.enable(); + }, 2) +}).enable(); + +crypto.randomBytes(1, common.mustCall(() => { + crypto.randomBytes(1, common.mustCall()); +}));