Index: runtime/vm/thread.cc |
diff --git a/runtime/vm/thread.cc b/runtime/vm/thread.cc |
index 620e542d209bec406d2116221d63c4c1a3d72e1a..d39b26d9c9657b5dc686fb1ac42de23b9a0053d9 100644 |
--- a/runtime/vm/thread.cc |
+++ b/runtime/vm/thread.cc |
@@ -101,6 +101,7 @@ Thread::Thread(Isolate* isolate) |
active_stacktrace_(Object::null()), |
resume_pc_(0), |
sticky_error_(Error::null()), |
+ async_stack_trace_(StackTrace::null()), |
compiler_stats_(NULL), |
REUSABLE_HANDLE_LIST(REUSABLE_HANDLE_INITIALIZERS) |
REUSABLE_HANDLE_LIST(REUSABLE_HANDLE_SCOPE_INIT) safepoint_state_(0), |
@@ -292,6 +293,22 @@ const char* Thread::TaskKindToCString(TaskKind kind) { |
} |
+RawStackTrace* Thread::async_stack_trace() const { |
+ return async_stack_trace_; |
+} |
+ |
+ |
+void Thread::set_async_stack_trace(const StackTrace& stack_trace) { |
+ ASSERT(!stack_trace.IsNull()); |
+ async_stack_trace_ = stack_trace.raw(); |
+} |
+ |
+ |
+void Thread::clear_async_stack_trace() { |
+ async_stack_trace_ = StackTrace::null(); |
+} |
+ |
+ |
bool Thread::EnterIsolate(Isolate* isolate) { |
const bool kIsMutatorThread = true; |
Thread* thread = isolate->ScheduleThread(kIsMutatorThread); |
@@ -670,6 +687,7 @@ void Thread::VisitObjectPointers(ObjectPointerVisitor* visitor, |
visitor->VisitPointer(reinterpret_cast<RawObject**>(&active_exception_)); |
visitor->VisitPointer(reinterpret_cast<RawObject**>(&active_stacktrace_)); |
visitor->VisitPointer(reinterpret_cast<RawObject**>(&sticky_error_)); |
+ visitor->VisitPointer(reinterpret_cast<RawObject**>(&async_stack_trace_)); |
// Visit the api local scope as it has all the api local handles. |
ApiLocalScope* scope = api_top_scope_; |