diff --git a/lib/internal/async_hooks.js b/lib/internal/async_hooks.js index 165d44b7022289..eeec0e6f82f36c 100644 --- a/lib/internal/async_hooks.js +++ b/lib/internal/async_hooks.js @@ -93,16 +93,6 @@ const emitDestroyNative = emitHookFactory(destroy_symbol, 'emitDestroyNative'); const emitPromiseResolveNative = emitHookFactory(promise_resolve_symbol, 'emitPromiseResolveNative'); -// Setup the callbacks that node::AsyncWrap will call when there are hooks to -// process. They use the same functions as the JS embedder API. These callbacks -// are setup immediately to prevent async_wrap.setupHooks() from being hijacked -// and the cost of doing so is negligible. -async_wrap.setupHooks({ init: emitInitNative, - before: emitBeforeNative, - after: emitAfterNative, - destroy: emitDestroyNative, - promise_resolve: emitPromiseResolveNative }); - // Used to fatally abort the process if a callback throws. function fatalError(e) { if (typeof e.stack === 'string') { @@ -462,4 +452,11 @@ module.exports = { emitAfter: emitAfterScript, emitDestroy: emitDestroyScript, registerDestroyHook, + nativeHooks: { + init: emitInitNative, + before: emitBeforeNative, + after: emitAfterNative, + destroy: emitDestroyNative, + promise_resolve: emitPromiseResolveNative + } }; diff --git a/lib/internal/bootstrap/node.js b/lib/internal/bootstrap/node.js index aff746f9716032..bb076ba9694330 100644 --- a/lib/internal/bootstrap/node.js +++ b/lib/internal/bootstrap/node.js @@ -169,6 +169,16 @@ if (isMainThread) { setupProcessStdio(getStdout, getStdin, getStderr); } +// Setup the callbacks that node::AsyncWrap will call when there are hooks to +// process. They use the same functions as the JS embedder API. These callbacks +// are setup immediately to prevent async_wrap.setupHooks() from being hijacked +// and the cost of doing so is negligible. +const { nativeHooks } = NativeModule.require('internal/async_hooks'); +internalBinding('async_wrap').setupHooks(nativeHooks); + +// XXX(joyeecheung): this has to be done after the initial load of +// `internal/async_hooks` otherwise `async_hooks` cannot require +// `internal/async_hooks`. Investigate why. if (config.hasInspector) { const { enable,