Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8faa3262 authored by Eric Laurent's avatar Eric Laurent
Browse files

DO NOT MERGE - 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
parent ac90a24d
Loading
Loading
Loading
Loading
+2 −5
Original line number Diff line number Diff line
@@ -2561,13 +2561,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);
        }
    }
}