OSDN Git Service

JDWP: fix Dbg::ResumeThread
authorSebastien Hertz <shertz@google.com>
Fri, 14 Apr 2017 12:18:36 +0000 (14:18 +0200)
committerSebastien Hertz <shertz@google.com>
Fri, 14 Apr 2017 12:22:18 +0000 (14:22 +0200)
A thread should be resumed if and only if it has been suspended by
the debugger. Therefore, we must check the debug suspend count, not
the suspend count (which includes debug suspend count). Otherwise we
could end up resuming a thread that has been suspended for another
reason (like a GC) but not by the debugger itself.

Bug: 27385848
Test: art/tools/run-jdwp-tests.sh --mode=host --variant=X64
Change-Id: I70ed6dfc233501e92332634650babf21ba911048

runtime/debugger.cc

index 868d8df..039b60a 100644 (file)
@@ -2453,7 +2453,7 @@ void Dbg::ResumeThread(JDWP::ObjectId thread_id) {
   bool needs_resume;
   {
     MutexLock mu2(soa.Self(), *Locks::thread_suspend_count_lock_);
-    needs_resume = thread->GetSuspendCount() > 0;
+    needs_resume = thread->GetDebugSuspendCount() > 0;
   }
   if (needs_resume) {
     Runtime::Current()->GetThreadList()->Resume(thread, true);