Merge "AudioManager: fix audio device callback list access" into mnc-dev
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java
index 3bf8129..5290cac 100644
--- a/media/java/android/media/AudioManager.java
+++ b/media/java/android/media/AudioManager.java
@@ -3859,8 +3859,8 @@
*/
public void registerAudioDeviceCallback(AudioDeviceCallback callback,
android.os.Handler handler) {
- if (callback != null && !mDeviceCallbacks.containsKey(callback)) {
- synchronized (mDeviceCallbacks) {
+ synchronized (mDeviceCallbacks) {
+ if (callback != null && !mDeviceCallbacks.containsKey(callback)) {
if (mDeviceCallbacks.size() == 0) {
if (mPortListener == null) {
mPortListener = new OnAmPortUpdateListener();
@@ -3924,21 +3924,20 @@
calcListDeltas(current_ports, mPreviousPorts, GET_DEVICES_ALL);
if (added_devices.length != 0 || removed_devices.length != 0) {
- Collection<NativeEventHandlerDelegate> values;
synchronized (mDeviceCallbacks) {
- values = mDeviceCallbacks.values();
- }
- for (NativeEventHandlerDelegate delegate : values) {
- handler = delegate.getHandler();
- if (handler != null) {
- if (added_devices.length != 0) {
- handler.sendMessage(
- Message.obtain(handler,MSG_DEVICES_DEVICES_ADDED, added_devices));
- }
- if (removed_devices.length != 0) {
- handler.sendMessage(
- Message.obtain(handler,MSG_DEVICES_DEVICES_REMOVED,
- removed_devices));
+ for (int i = 0; i < mDeviceCallbacks.size(); i++) {
+ handler = mDeviceCallbacks.valueAt(i).getHandler();
+ if (handler != null) {
+ if (added_devices.length != 0) {
+ handler.sendMessage(Message.obtain(handler,
+ MSG_DEVICES_DEVICES_ADDED,
+ added_devices));
+ }
+ if (removed_devices.length != 0) {
+ handler.sendMessage(Message.obtain(handler,
+ MSG_DEVICES_DEVICES_REMOVED,
+ removed_devices));
+ }
}
}
}