Lazy-load CLS module
As soon as CLS module is loaded, the instrumentation/patching of async-listener is fired. This may cause stack overflows due to promise instrumentation. By loading CLS module lazily (only when used for real), we avoid this kind of problems in applications that are not using current-context at all.
This commit is contained in:
parent
2a0bbb3c77
commit
df60f13f4d
|
@ -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() {
|
||||
|
|
Loading…
Reference in New Issue