AudioManager: fix event handler

Fix access by reference to listener list outside of
synchronized block by cloning the list.

Bug: 154341343
Test: AudioPolicyTest#testAudioPorts, AudioManagerTest#testVolumeGroupCallback, AudioRoutingTest
Change-Id: I1f0fd62c1894dc0dbb07b01f2fd78899e48b4932
This commit is contained in:
Eric Laurent
2020-04-20 12:49:25 -07:00
parent a29a359ce4
commit f3a10cd244
2 changed files with 4 additions and 2 deletions

View File

@@ -78,7 +78,8 @@ class AudioPortEventHandler {
listeners.add((AudioManager.OnAudioPortUpdateListener)msg.obj);
}
} else {
listeners = mListeners;
listeners = (ArrayList<AudioManager.OnAudioPortUpdateListener>)
mListeners.clone();
}
}
// reset audio port cache if the event corresponds to a change coming

View File

@@ -80,7 +80,8 @@ public class AudioVolumeGroupChangeHandler {
(AudioManager.VolumeGroupCallback) msg.obj);
}
} else {
listeners = mListeners;
listeners = (ArrayList<AudioManager.VolumeGroupCallback>)
mListeners.clone();
}
}
if (listeners.isEmpty()) {