Fix thread status in THST chunk to use JDWP thread state.
Bug: 10492287
Change-Id: I830a2ce71d02c5b09c7040583be98d818eef9385
diff --git a/runtime/debugger.cc b/runtime/debugger.cc
index a72ae22..e01857f 100644
--- a/runtime/debugger.cc
+++ b/runtime/debugger.cc
@@ -1661,6 +1661,38 @@
return gRegistry->Add(group);
}
+JDWP::JdwpThreadStatus Dbg::ToJdwpThreadStatus(ThreadState state) {
+ switch (state) {
+ case kBlocked:
+ return JDWP::TS_MONITOR;
+ case kNative:
+ case kRunnable:
+ case kSuspended:
+ return JDWP::TS_RUNNING;
+ case kSleeping:
+ return JDWP::TS_SLEEPING;
+ case kStarting:
+ case kTerminated:
+ return JDWP::TS_ZOMBIE;
+ case kTimedWaiting:
+ case kWaitingForDebuggerSend:
+ case kWaitingForDebuggerSuspension:
+ case kWaitingForDebuggerToAttach:
+ case kWaitingForGcToComplete:
+ case kWaitingForCheckPointsToRun:
+ case kWaitingForJniOnLoad:
+ case kWaitingForSignalCatcherOutput:
+ case kWaitingInMainDebuggerLoop:
+ case kWaitingInMainSignalCatcherLoop:
+ case kWaitingPerformingGc:
+ case kWaiting:
+ return JDWP::TS_WAIT;
+ // Don't add a 'default' here so the compiler can spot incompatible enum changes.
+ }
+ LOG(FATAL) << "Unknown thread state: " << state;
+ return JDWP::TS_ZOMBIE;
+}
+
JDWP::JdwpError Dbg::GetThreadStatus(JDWP::ObjectId thread_id, JDWP::JdwpThreadStatus* pThreadStatus, JDWP::JdwpSuspendStatus* pSuspendStatus) {
ScopedObjectAccess soa(Thread::Current());
@@ -1681,28 +1713,7 @@
*pSuspendStatus = JDWP::SUSPEND_STATUS_SUSPENDED;
}
- switch (thread->GetState()) {
- case kBlocked: *pThreadStatus = JDWP::TS_MONITOR; break;
- case kNative: *pThreadStatus = JDWP::TS_RUNNING; break;
- case kRunnable: *pThreadStatus = JDWP::TS_RUNNING; break;
- case kSleeping: *pThreadStatus = JDWP::TS_SLEEPING; break;
- case kStarting: *pThreadStatus = JDWP::TS_ZOMBIE; break;
- case kSuspended: *pThreadStatus = JDWP::TS_RUNNING; break;
- case kTerminated: *pThreadStatus = JDWP::TS_ZOMBIE; break;
- case kTimedWaiting: *pThreadStatus = JDWP::TS_WAIT; break;
- case kWaitingForDebuggerSend: *pThreadStatus = JDWP::TS_WAIT; break;
- case kWaitingForDebuggerSuspension: *pThreadStatus = JDWP::TS_WAIT; break;
- case kWaitingForDebuggerToAttach: *pThreadStatus = JDWP::TS_WAIT; break;
- case kWaitingForGcToComplete: *pThreadStatus = JDWP::TS_WAIT; break;
- case kWaitingForCheckPointsToRun: *pThreadStatus = JDWP::TS_WAIT; break;
- case kWaitingForJniOnLoad: *pThreadStatus = JDWP::TS_WAIT; break;
- case kWaitingForSignalCatcherOutput: *pThreadStatus = JDWP::TS_WAIT; break;
- case kWaitingInMainDebuggerLoop: *pThreadStatus = JDWP::TS_WAIT; break;
- case kWaitingInMainSignalCatcherLoop: *pThreadStatus = JDWP::TS_WAIT; break;
- case kWaitingPerformingGc: *pThreadStatus = JDWP::TS_WAIT; break;
- case kWaiting: *pThreadStatus = JDWP::TS_WAIT; break;
- // Don't add a 'default' here so the compiler can spot incompatible enum changes.
- }
+ *pThreadStatus = ToJdwpThreadStatus(thread->GetState());
return JDWP::ERR_NONE;
}