diff options
| author | 2012-10-31 16:56:18 -0700 | |
|---|---|---|
| committer | 2012-10-31 16:56:18 -0700 | |
| commit | e46cd75f182a3d738c5e2ef3cc90b2f0b1de56ee (patch) | |
| tree | ffd976fbc1195cddbb956f87a73d423d611b3cf9 /src/mutex.cc | |
| parent | 332f6827edf72f9b3d247a6c2fa79e4d520a409d (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.cc | 1 |
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. |