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

Commit ad55730b authored by Tom Chan's avatar Tom Chan Committed by Android (Google) Code Review
Browse files

Merge "Fix deadlock between attachSystemDataTransport and...

Merge "Fix deadlock between attachSystemDataTransport and addOnTransportsChangedListener." into main
parents 8731e602 be525fb5
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -57,8 +57,11 @@ public class CompanionTransportManager {
    /** Association id -> Transport */
    @GuardedBy("mTransports")
    private final SparseArray<Transport> mTransports = new SparseArray<>();

    // Use mTransports to synchronize both mTransports and mTransportsListeners to avoid deadlock
    // between threads that access both
    @NonNull
    @GuardedBy("mTransportsListeners")
    @GuardedBy("mTransports")
    private final RemoteCallbackList<IOnTransportsChangedListener> mTransportsListeners =
            new RemoteCallbackList<>();

@@ -95,7 +98,7 @@ public class CompanionTransportManager {
     */
    public void addListener(IOnTransportsChangedListener listener) {
        Slog.i(TAG, "Registering OnTransportsChangedListener");
        synchronized (mTransportsListeners) {
        synchronized (mTransports) {
            mTransportsListeners.register(listener);
            mTransportsListeners.broadcast(listener1 -> {
                // callback to the current listener with all the associations of the transports
@@ -114,7 +117,7 @@ public class CompanionTransportManager {
     * Remove the listener for receiving callbacks when any of the transports is changed
     */
    public void removeListener(IOnTransportsChangedListener listener) {
        synchronized (mTransportsListeners) {
        synchronized (mTransports) {
            mTransportsListeners.unregister(listener);
        }
    }
@@ -204,7 +207,7 @@ public class CompanionTransportManager {
    }

    private void notifyOnTransportsChanged() {
        synchronized (mTransportsListeners) {
        synchronized (mTransports) {
            mTransportsListeners.broadcast(listener -> {
                try {
                    listener.onTransportsChanged(getAssociationsWithTransport());