Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 18204d2b authored by Phil Burk's avatar Phil Burk Committed by android-build-merger
Browse files

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

am: 0e81694a

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

Change-Id: I13b8afe0afb6f5917f52e0f845a12a6cff1ac56f
parents c94fd166 0e81694a
Loading
Loading
Loading
Loading
+9 −7
Original line number Original line Diff line number Diff line
@@ -126,8 +126,8 @@ public class MidiService extends IMidiManager.Stub {
        // This client's PID
        // This client's PID
        private final int mPid;
        private final int mPid;
        // List of all receivers for this client
        // List of all receivers for this client
        private final ArrayList<IMidiDeviceListener> mListeners
        private final HashMap<IBinder, IMidiDeviceListener> mListeners
                = new ArrayList<IMidiDeviceListener>();
                = new HashMap<IBinder, IMidiDeviceListener>();
        // List of all device connections for this client
        // List of all device connections for this client
        private final HashMap<IBinder, DeviceConnection> mDeviceConnections
        private final HashMap<IBinder, DeviceConnection> mDeviceConnections
                = new HashMap<IBinder, DeviceConnection>();
                = new HashMap<IBinder, DeviceConnection>();
@@ -143,11 +143,13 @@ public class MidiService extends IMidiManager.Stub {
        }
        }


        public void addListener(IMidiDeviceListener listener) {
        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) {
        public void removeListener(IMidiDeviceListener listener) {
            mListeners.remove(listener);
            mListeners.remove(listener.asBinder());
            if (mListeners.size() == 0 && mDeviceConnections.size() == 0) {
            if (mListeners.size() == 0 && mDeviceConnections.size() == 0) {
                close();
                close();
            }
            }
@@ -184,7 +186,7 @@ public class MidiService extends IMidiManager.Stub {


            MidiDeviceInfo deviceInfo = device.getDeviceInfo();
            MidiDeviceInfo deviceInfo = device.getDeviceInfo();
            try {
            try {
                for (IMidiDeviceListener listener : mListeners) {
                for (IMidiDeviceListener listener : mListeners.values()) {
                    listener.onDeviceAdded(deviceInfo);
                    listener.onDeviceAdded(deviceInfo);
                }
                }
            } catch (RemoteException e) {
            } catch (RemoteException e) {
@@ -198,7 +200,7 @@ public class MidiService extends IMidiManager.Stub {


            MidiDeviceInfo deviceInfo = device.getDeviceInfo();
            MidiDeviceInfo deviceInfo = device.getDeviceInfo();
            try {
            try {
                for (IMidiDeviceListener listener : mListeners) {
                for (IMidiDeviceListener listener : mListeners.values()) {
                    listener.onDeviceRemoved(deviceInfo);
                    listener.onDeviceRemoved(deviceInfo);
                }
                }
            } catch (RemoteException e) {
            } catch (RemoteException e) {
@@ -211,7 +213,7 @@ public class MidiService extends IMidiManager.Stub {
            if (!device.isUidAllowed(mUid)) return;
            if (!device.isUidAllowed(mUid)) return;


            try {
            try {
                for (IMidiDeviceListener listener : mListeners) {
                for (IMidiDeviceListener listener : mListeners.values()) {
                    listener.onDeviceStatusChanged(status);
                    listener.onDeviceStatusChanged(status);
                }
                }
            } catch (RemoteException e) {
            } catch (RemoteException e) {