Prevent modifying mAudioPolicies during iteration
Calling release on a policy from mAudioPolicies removes a key from the
map, causing a ConcurrentHashException.
Defer releases till after iteration completes.
Test: Compiles
Bug: 240314224
Change-Id: I83fa969204d8a9c6ac7bae40f5be57a92813f6be
(cherry picked from commit 6f837517a2)
Merged-In: I83fa969204d8a9c6ac7bae40f5be57a92813f6be
This commit is contained in:
@@ -1569,6 +1569,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) {
|
||||||
@@ -1576,7 +1577,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) {
|
||||||
@@ -1584,10 +1585,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
|
||||||
|
|||||||
Reference in New Issue
Block a user