summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorEric Laurent <elaurent@google.com>2014-12-04 18:58:14 -0800
committerEric Laurent <elaurent@google.com>2014-12-05 16:25:23 -0800
commit0add0fd07401c507a77b37868f46a2ae587c30df (patch)
tree9059f3b9d504aed17bc52ea3efb398129d16ecba /services
parentd6e7f1e1f8b1dfa6a87c7c0b1a5c68d435096b01 (diff)
downloadframeworks_av-0add0fd07401c507a77b37868f46a2ae587c30df.zip
frameworks_av-0add0fd07401c507a77b37868f46a2ae587c30df.tar.gz
frameworks_av-0add0fd07401c507a77b37868f46a2ae587c30df.tar.bz2
audio policy: fix inifinite loop in clearAudioPatches()
releaseAudioPatch() does not necessarily remove the audio patch from the list. Scan the list from the top down to avoid adjusting the index. Bug: 18621514. Change-Id: I58787154680f7cb1818509017835b1693d62190f
Diffstat (limited to 'services')
-rw-r--r--services/audiopolicy/AudioPolicyManager.cpp7
1 files changed, 2 insertions, 5 deletions
diff --git a/services/audiopolicy/AudioPolicyManager.cpp b/services/audiopolicy/AudioPolicyManager.cpp
index b5a3d5b..76acc41 100644
--- a/services/audiopolicy/AudioPolicyManager.cpp
+++ b/services/audiopolicy/AudioPolicyManager.cpp
@@ -2650,13 +2650,10 @@ status_t AudioPolicyManager::setAudioPortConfig(const struct audio_port_config *
void AudioPolicyManager::clearAudioPatches(uid_t uid)
{
- for (ssize_t i = 0; i < (ssize_t)mAudioPatches.size(); i++) {
+ for (ssize_t i = (ssize_t)mAudioPatches.size() - 1; i >= 0; i--) {
sp<AudioPatch> patchDesc = mAudioPatches.valueAt(i);
if (patchDesc->mUid == uid) {
- // releaseAudioPatch() removes the patch from mAudioPatches
- if (releaseAudioPatch(mAudioPatches.keyAt(i), uid) == NO_ERROR) {
- i--;
- }
+ releaseAudioPatch(mAudioPatches.keyAt(i), uid);
}
}
}