Merge "MidiService: fix resource leak" into nyc-dev

am: 0e81694

* commit '0e81694a02f3405aeec3205372e8fe6e3ed7c0c3':
  MidiService: fix resource leak

Change-Id: I929d1e6bade8ac685fbc0ac2e0cff7d16e64adfd
This commit is contained in:
Phil Burk
2016-04-19 19:18:29 +00:00
committed by android-build-merger

View File

@@ -126,8 +126,8 @@ public class MidiService extends IMidiManager.Stub {
// This client's PID
private final int mPid;
// List of all receivers for this client
private final ArrayList<IMidiDeviceListener> mListeners
= new ArrayList<IMidiDeviceListener>();
private final HashMap<IBinder, IMidiDeviceListener> mListeners
= new HashMap<IBinder, IMidiDeviceListener>();
// List of all device connections for this client
private final HashMap<IBinder, DeviceConnection> mDeviceConnections
= new HashMap<IBinder, DeviceConnection>();
@@ -143,11 +143,13 @@ public class MidiService extends IMidiManager.Stub {
}
public void addListener(IMidiDeviceListener listener) {
mListeners.add(listener);
// Use asBinder() so that we can match it in removeListener().
// The listener proxy objects themselves do not match.
mListeners.put(listener.asBinder(), listener);
}
public void removeListener(IMidiDeviceListener listener) {
mListeners.remove(listener);
mListeners.remove(listener.asBinder());
if (mListeners.size() == 0 && mDeviceConnections.size() == 0) {
close();
}
@@ -184,7 +186,7 @@ public class MidiService extends IMidiManager.Stub {
MidiDeviceInfo deviceInfo = device.getDeviceInfo();
try {
for (IMidiDeviceListener listener : mListeners) {
for (IMidiDeviceListener listener : mListeners.values()) {
listener.onDeviceAdded(deviceInfo);
}
} catch (RemoteException e) {
@@ -198,7 +200,7 @@ public class MidiService extends IMidiManager.Stub {
MidiDeviceInfo deviceInfo = device.getDeviceInfo();
try {
for (IMidiDeviceListener listener : mListeners) {
for (IMidiDeviceListener listener : mListeners.values()) {
listener.onDeviceRemoved(deviceInfo);
}
} catch (RemoteException e) {
@@ -211,7 +213,7 @@ public class MidiService extends IMidiManager.Stub {
if (!device.isUidAllowed(mUid)) return;
try {
for (IMidiDeviceListener listener : mListeners) {
for (IMidiDeviceListener listener : mListeners.values()) {
listener.onDeviceStatusChanged(status);
}
} catch (RemoteException e) {