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

Commit c130d4d4 authored by Mike Lockwood's avatar Mike Lockwood Committed by Android (Google) Code Review
Browse files

Merge "MidiService: Fix some concurrency problems"

parents 2f6fb3d1 87f6fe12
Loading
Loading
Loading
Loading
+24 −15
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@ import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

public class MidiService extends IMidiManager.Stub {
@@ -269,9 +270,11 @@ public class MidiService extends IMidiManager.Stub {

        public void binderDied() {
            synchronized (mDevicesByInfo) {
                if (mDevicesByInfo.remove(mDeviceInfo) != null) {
                    removeDeviceLocked(this);
                }
            }
        }

        @Override
        public String toString() {
@@ -368,6 +371,7 @@ public class MidiService extends IMidiManager.Stub {
        synchronized (mDevicesByInfo) {
            Device device = mDevicesByServer.get(server.asBinder());
            if (device != null) {
                mDevicesByInfo.remove(device.getDeviceInfo());
                removeDeviceLocked(device);
            }
        }
@@ -454,7 +458,6 @@ public class MidiService extends IMidiManager.Stub {

    // synchronize on mDevicesByInfo
    private void removeDeviceLocked(Device device) {
        if (mDevicesByInfo.remove(device.getDeviceInfo()) != null) {
        IMidiDeviceServer server = device.getDeviceServer();
        if (server != null) {
            mDevicesByServer.remove(server);
@@ -466,7 +469,6 @@ public class MidiService extends IMidiManager.Stub {
            }
        }
    }
    }

    private void addPackageDeviceServers(String packageName) {
        PackageInfo info;
@@ -616,8 +618,11 @@ public class MidiService extends IMidiManager.Stub {

    private void removePackageDeviceServers(String packageName) {
        synchronized (mDevicesByInfo) {
            for (Device device : mDevicesByInfo.values()) {
            Iterator<Device> iterator = mDevicesByInfo.values().iterator();
            while (iterator.hasNext()) {
                Device device = iterator.next();
                if (packageName.equals(device.getPackageName())) {
                    iterator.remove();
                    removeDeviceLocked(device);
                }
            }
@@ -634,16 +639,20 @@ public class MidiService extends IMidiManager.Stub {

        pw.println("Devices:");
        pw.increaseIndent();
        synchronized (mDevicesByInfo) {
            for (Device device : mDevicesByInfo.values()) {
                pw.println(device.toString());
            }
        }
        pw.decreaseIndent();

        pw.println("Clients:");
        pw.increaseIndent();
        synchronized (mClients) {
            for (Client client : mClients.values()) {
                pw.println(client.toString());
            }
        }
        pw.decreaseIndent();
    }
}