Index: runtime/vm/thread_interrupter_android.cc |
diff --git a/runtime/vm/thread_interrupter_android.cc b/runtime/vm/thread_interrupter_android.cc |
index 493155853cd19316500f897a7ea2d598589c9f30..5c4092dbe8c54ad6e69c34a53efdd6edcf70f917 100644 |
--- a/runtime/vm/thread_interrupter_android.cc |
+++ b/runtime/vm/thread_interrupter_android.cc |
@@ -24,33 +24,36 @@ class ThreadInterrupterAndroid : public AllStatic { |
if (signal != SIGPROF) { |
return; |
} |
- InterruptableThreadState* state = ThreadInterrupter::CurrentThreadState(); |
- if ((state == NULL) || (state->callback == NULL)) { |
- // No interrupter state or callback. |
+ Thread* thread = Thread::Current(); |
+ if (thread == NULL) { |
+ return; |
+ } |
+ ThreadInterruptCallback callback = NULL; |
+ void* callback_data = NULL; |
+ if (!thread->IsThreadInterrupterEnabled(&callback, &callback_data)) { |
return; |
} |
- ASSERT(OSThread::Compare(state->id, OSThread::GetCurrentThreadId())); |
// Extract thread state. |
ucontext_t* context = reinterpret_cast<ucontext_t*>(context_); |
mcontext_t mcontext = context->uc_mcontext; |
InterruptedThreadState its; |
- its.tid = state->id; |
+ its.tid = thread->id(); |
its.pc = SignalHandler::GetProgramCounter(mcontext); |
its.fp = SignalHandler::GetFramePointer(mcontext); |
its.csp = SignalHandler::GetCStackPointer(mcontext); |
its.dsp = SignalHandler::GetDartStackPointer(mcontext); |
its.lr = SignalHandler::GetLinkRegister(mcontext); |
- state->callback(its, state->data); |
+ callback(its, callback_data); |
} |
}; |
-void ThreadInterrupter::InterruptThread(InterruptableThreadState* state) { |
+void ThreadInterrupter::InterruptThread(Thread* thread) { |
if (FLAG_trace_thread_interrupter) { |
OS::Print("ThreadInterrupter interrupting %p\n", |
- reinterpret_cast<void*>(state->id)); |
+ reinterpret_cast<void*>(thread->id())); |
} |
- int result = syscall(__NR_tgkill, getpid(), state->id, SIGPROF); |
+ int result = syscall(__NR_tgkill, getpid(), thread->id(), SIGPROF); |
ASSERT(result == 0); |
} |