From 410b1417648b5273fe80f4d910c6bbd198a00a2d Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Sun, 21 May 2017 17:14:21 +0200 Subject: async_hooks: only set up hooks if used PR-URL: https://github.com/nodejs/node/pull/13177 Reviewed-By: James M Snell Reviewed-By: Andreas Madsen Reviewed-By: Jeremiah Senkpiel Reviewed-By: Colin Ihrig --- lib/async_hooks.js | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'lib/async_hooks.js') diff --git a/lib/async_hooks.js b/lib/async_hooks.js index 9ff244aad7..354fb1114f 100644 --- a/lib/async_hooks.js +++ b/lib/async_hooks.js @@ -49,12 +49,7 @@ const before_symbol = Symbol('before'); const after_symbol = Symbol('after'); const destroy_symbol = Symbol('destroy'); -// Setup the callbacks that node::AsyncWrap will call when there are hooks to -// process. They use the same functions as the JS embedder API. -async_wrap.setupHooks({ init, - before: emitBeforeN, - after: emitAfterN, - destroy: emitDestroyN }); +let setupHooksCalled = false; // Used to fatally abort the process if a callback throws. function fatalError(e) { @@ -103,6 +98,16 @@ class AsyncHook { if (hooks_array.includes(this)) return; + if (!setupHooksCalled) { + setupHooksCalled = true; + // Setup the callbacks that node::AsyncWrap will call when there are + // hooks to process. They use the same functions as the JS embedder API. + async_wrap.setupHooks({ init, + before: emitBeforeN, + after: emitAfterN, + destroy: emitDestroyN }); + } + // createHook() has already enforced that the callbacks are all functions, // so here simply increment the count of whether each callbacks exists or // not. -- cgit v1.2.3