diff --git a/server/current-context.js b/server/current-context.js index 19fcb93..8e6ae13 100644 --- a/server/current-context.js +++ b/server/current-context.js @@ -5,9 +5,21 @@ 'use strict'; -var cls = require('continuation-local-storage'); var domain = require('domain'); + +// Require CLS only when using the current context feature. +// As soon as this require is done, all the instrumentation/patching +// of async-listener is fired which is not ideal. +// +// Some users observed stack overflows due to promise instrumentation +// and other people have seen similar things: +// https://github.com/othiym23/async-listener/issues/57 +// It all goes away when instrumentation is disabled. +var cls = function() { + return require('continuation-local-storage'); +}; + var LoopBackContext = module.exports; /** @@ -74,7 +86,7 @@ LoopBackContext.createContext = function(scopeName) { process.context = process.context || {}; var ns = process.context[scopeName]; if (!ns) { - ns = cls.createNamespace(scopeName); + ns = cls().createNamespace(scopeName); process.context[scopeName] = ns; // Set up LoopBackContext.getCurrentContext() LoopBackContext.getCurrentContext = function() {