Merge "Avoid race condition when broadcasting device list changed." into pi-dev

am: 2914820ebf

Change-Id: I60801432a37de495e2b2c9282f8c2bfef17aab4d
This commit is contained in:
jiabin
2018-05-23 16:07:20 -07:00
committed by android-build-merger

View File

@@ -4717,7 +4717,7 @@ public class AudioManager {
NativeEventHandlerDelegate delegate =
new NativeEventHandlerDelegate(callback, handler);
mDeviceCallbacks.put(callback, delegate);
broadcastDeviceListChange(delegate.getHandler());
broadcastDeviceListChange_sync(delegate.getHandler());
}
}
}
@@ -4836,9 +4836,9 @@ public class AudioManager {
/**
* Internal method to compute and generate add/remove messages and then send to any
* registered callbacks.
* registered callbacks. Must be called synchronized on mDeviceCallbacks.
*/
private void broadcastDeviceListChange(Handler handler) {
private void broadcastDeviceListChange_sync(Handler handler) {
int status;
// Get the new current set of ports
@@ -4860,20 +4860,18 @@ public class AudioManager {
AudioDeviceInfo[] removed_devices =
calcListDeltas(current_ports, mPreviousPorts, GET_DEVICES_ALL);
if (added_devices.length != 0 || removed_devices.length != 0) {
synchronized (mDeviceCallbacks) {
for (int i = 0; i < mDeviceCallbacks.size(); i++) {
handler = mDeviceCallbacks.valueAt(i).getHandler();
if (handler != null) {
if (removed_devices.length != 0) {
handler.sendMessage(Message.obtain(handler,
MSG_DEVICES_DEVICES_REMOVED,
removed_devices));
}
if (added_devices.length != 0) {
handler.sendMessage(Message.obtain(handler,
MSG_DEVICES_DEVICES_ADDED,
added_devices));
}
for (int i = 0; i < mDeviceCallbacks.size(); i++) {
handler = mDeviceCallbacks.valueAt(i).getHandler();
if (handler != null) {
if (removed_devices.length != 0) {
handler.sendMessage(Message.obtain(handler,
MSG_DEVICES_DEVICES_REMOVED,
removed_devices));
}
if (added_devices.length != 0) {
handler.sendMessage(Message.obtain(handler,
MSG_DEVICES_DEVICES_ADDED,
added_devices));
}
}
}
@@ -4889,7 +4887,9 @@ public class AudioManager {
private class OnAmPortUpdateListener implements AudioManager.OnAudioPortUpdateListener {
static final String TAG = "OnAmPortUpdateListener";
public void onAudioPortListUpdate(AudioPort[] portList) {
broadcastDeviceListChange(null);
synchronized (mDeviceCallbacks) {
broadcastDeviceListChange_sync(null);
}
}
/**
@@ -4903,7 +4903,9 @@ public class AudioManager {
* Callback method called when the mediaserver dies
*/
public void onServiceDied() {
broadcastDeviceListChange(null);
synchronized (mDeviceCallbacks) {
broadcastDeviceListChange_sync(null);
}
}
}