diff options
author | Eric Laurent <elaurent@google.com> | 2014-01-29 15:17:32 -0800 |
---|---|---|
committer | Eric Laurent <elaurent@google.com> | 2014-01-29 15:25:32 -0800 |
commit | 000a4193dd82549192277fd4b9bb571d8a4c262f (patch) | |
tree | 62bb97def825703a634d8a4260431ce5afd68b53 /services | |
parent | 0eed5ac1a14067d0fd51282e97b43b4fd9121842 (diff) | |
download | frameworks_av-000a4193dd82549192277fd4b9bb571d8a4c262f.zip frameworks_av-000a4193dd82549192277fd4b9bb571d8a4c262f.tar.gz frameworks_av-000a4193dd82549192277fd4b9bb571d8a4c262f.tar.bz2 |
audioflinger: fix record thread exit pending check
RecordThread loop must not release the mutex after checking for
exitPending and before waiting for a new wake up condition.
This can happen under the hood when methods like processConfigEvents_l()
or checkForNewParameters_l() are called. So exitPending() must
be checked after calling these functions.
Bug: 12787961.
Change-Id: Ia18c518bd5344fbb2401067303fcfe76a86879c4
Diffstat (limited to 'services')
-rw-r--r-- | services/audioflinger/Threads.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp index 2b37761..515368c 100644 --- a/services/audioflinger/Threads.cpp +++ b/services/audioflinger/Threads.cpp @@ -4474,13 +4474,17 @@ reacquire_wakelock: { // scope for mLock Mutex::Autolock _l(mLock); - if (exitPending()) { - break; - } + processConfigEvents_l(); // return value 'reconfig' is currently unused bool reconfig = checkForNewParameters_l(); + // check exitPending here because checkForNewParameters_l() and + // checkForNewParameters_l() can temporarily release mLock + if (exitPending()) { + break; + } + // if no active track(s), then standby and release wakelock size_t size = mActiveTracks.size(); if (size == 0) { |