diff options
author | Jonathan Abrahams <jonathan@mongodb.com> | 2017-03-16 09:49:43 -0400 |
---|---|---|
committer | Jonathan Abrahams <jonathan@mongodb.com> | 2017-03-16 09:49:43 -0400 |
commit | eaf3190fd59d291bb537cd3f3edde7e6abab7466 (patch) | |
tree | 2c38296eec64decac8aae53fd79df29060a45e07 /src/mongo/scripting/mozjs/implscope.cpp | |
parent | 9791e079fdf873bd09d144e04818384f92f38594 (diff) | |
download | mongo-eaf3190fd59d291bb537cd3f3edde7e6abab7466.tar.gz |
SERVER-27873 Dump a JavaScript backtrace of any code running in SpiderMonkey in hang_analyzer.py
Diffstat (limited to 'src/mongo/scripting/mozjs/implscope.cpp')
-rw-r--r-- | src/mongo/scripting/mozjs/implscope.cpp | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/mongo/scripting/mozjs/implscope.cpp b/src/mongo/scripting/mozjs/implscope.cpp index eb393f3703d..fe4e68209e4 100644 --- a/src/mongo/scripting/mozjs/implscope.cpp +++ b/src/mongo/scripting/mozjs/implscope.cpp @@ -96,7 +96,7 @@ bool closeToMaxMemory() { } } // namespace -MONGO_TRIVIALLY_CONSTRUCTIBLE_THREAD_LOCAL MozJSImplScope* kCurrentScope; +MONGO_TRIVIALLY_CONSTRUCTIBLE_THREAD_LOCAL MozJSImplScope* kCurrentScope = nullptr; struct MozJSImplScope::MozJSEntry { MozJSEntry(MozJSImplScope* scope) @@ -938,5 +938,20 @@ const std::string& MozJSImplScope::getParentStack() const { return _parentStack; } +std::string MozJSImplScope::buildStackString() { + JS::RootedObject stack(_context); + + if (!JS::CaptureCurrentStack(_context, &stack)) { + return {}; + } + + JS::RootedString out(_context); + if (JS::BuildStackString(_context, stack, &out)) { + return JSStringWrapper(_context, out.get()).toString(); + } else { + return {}; + } +} + } // namespace mozjs } // namespace mongo |