summaryrefslogtreecommitdiff
path: root/src/mongo/scripting/mozjs/implscope.cpp
diff options
context:
space:
mode:
authorJonathan Abrahams <jonathan@mongodb.com>2017-03-16 09:49:43 -0400
committerJonathan Abrahams <jonathan@mongodb.com>2017-03-16 09:49:43 -0400
commiteaf3190fd59d291bb537cd3f3edde7e6abab7466 (patch)
tree2c38296eec64decac8aae53fd79df29060a45e07 /src/mongo/scripting/mozjs/implscope.cpp
parent9791e079fdf873bd09d144e04818384f92f38594 (diff)
downloadmongo-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.cpp17
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