Merge "Prevent modifying mAudioPolicies during iteration" am: aded52644c

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2214962

Change-Id: I1139c75da05e5aaac1605aadca8119ea779b21f0
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Treehugger Robot
2022-09-12 22:40:36 +00:00
committed by Automerger Merge Worker

View File

@@ -1517,6 +1517,7 @@ public class AudioService extends IAudioService.Stub
} }
synchronized (mAudioPolicies) { synchronized (mAudioPolicies) {
ArrayList<AudioPolicyProxy> invalidProxies = new ArrayList<>();
for (AudioPolicyProxy policy : mAudioPolicies.values()) { for (AudioPolicyProxy policy : mAudioPolicies.values()) {
final int status = policy.connectMixes(); final int status = policy.connectMixes();
if (status != AudioSystem.SUCCESS) { if (status != AudioSystem.SUCCESS) {
@@ -1524,7 +1525,7 @@ public class AudioService extends IAudioService.Stub
Log.e(TAG, "onAudioServerDied: error " Log.e(TAG, "onAudioServerDied: error "
+ AudioSystem.audioSystemErrorToString(status) + AudioSystem.audioSystemErrorToString(status)
+ " when connecting mixes for policy " + policy.toLogFriendlyString()); + " when connecting mixes for policy " + policy.toLogFriendlyString());
policy.release(); invalidProxies.add(policy);
} else { } else {
final int deviceAffinitiesStatus = policy.setupDeviceAffinities(); final int deviceAffinitiesStatus = policy.setupDeviceAffinities();
if (deviceAffinitiesStatus != AudioSystem.SUCCESS) { if (deviceAffinitiesStatus != AudioSystem.SUCCESS) {
@@ -1532,10 +1533,12 @@ public class AudioService extends IAudioService.Stub
+ AudioSystem.audioSystemErrorToString(deviceAffinitiesStatus) + AudioSystem.audioSystemErrorToString(deviceAffinitiesStatus)
+ " when connecting device affinities for policy " + " when connecting device affinities for policy "
+ policy.toLogFriendlyString()); + policy.toLogFriendlyString());
policy.release(); invalidProxies.add(policy);
} }
} }
} }
invalidProxies.forEach((policy) -> policy.release());
} }
// Restore capture policies // Restore capture policies