Merge "Avoid race condition when broadcasting device list changed." into pi-dev
am: 2914820ebf
Change-Id: I60801432a37de495e2b2c9282f8c2bfef17aab4d
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user