summaryrefslogtreecommitdiff
path: root/src/mutex.cc
diff options
context:
space:
mode:
author Mathieu Chartier <mathieuc@google.com> 2012-10-31 16:56:18 -0700
committer Mathieu Chartier <mathieuc@google.com> 2012-10-31 16:56:18 -0700
commite46cd75f182a3d738c5e2ef3cc90b2f0b1de56ee (patch)
treeffd976fbc1195cddbb956f87a73d423d611b3cf9 /src/mutex.cc
parent332f6827edf72f9b3d247a6c2fa79e4d520a409d (diff)
Fix race condition in thread pool shutdown
We were not holding the task queue lock when we did broadcast, causing a race where a thread waits on the CV after the broadcast. Fixes dex2oat deadlocking. Change-Id: I84f30020511c2bd43f71d9b7b392720bd8d03eab
Diffstat (limited to 'src/mutex.cc')
-rw-r--r--src/mutex.cc1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/mutex.cc b/src/mutex.cc
index a4347ba6d2..0e33f3cc48 100644
--- a/src/mutex.cc
+++ b/src/mutex.cc
@@ -749,6 +749,7 @@ void ConditionVariable::Broadcast(Thread* self) {
DCHECK(self == NULL || self == Thread::Current());
// TODO: enable below, there's a race in thread creation that causes false failures currently.
// guard_.AssertExclusiveHeld(self);
+ DCHECK_EQ(guard_.GetExclusiveOwnerTid(), SafeGetTid(self));
#if ART_USE_FUTEXES
if (num_waiters_ > 0) {
android_atomic_inc(&state_); // Indicate a wake has occurred to waiters coming in.