Merge "MidiService: fix resource leak" into nyc-dev
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user