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

Commit fe817175 authored by Quang Anh Luong's avatar Quang Anh Luong
Browse files

Call onServiceDisconnected on callback executor

SharedConnectivityClientCallback.onServiceDisconnected is being called
directly on the main thread instead of the callback executor, which is
causing race conditions. Make sure to call this via the proxy so it runs
on the executor instead.

Flag: EXEMPT bugfix

Bug: 331652253
Test: atest SharedConnectivityManagerTest
Change-Id: I5f74632538fca10e0b6e2b4270345634b50d2513
parent e373737f
Loading
Loading
Loading
Loading
+16 −4
Original line number Diff line number Diff line
@@ -97,6 +97,18 @@ public class SharedConnectivityManager {
            }
        }

        @Override
        public void onServiceDisconnected() {
            if (mCallback != null) {
                final long token = Binder.clearCallingIdentity();
                try {
                    mExecutor.execute(() -> mCallback.onServiceDisconnected());
                } finally {
                    Binder.restoreCallingIdentity(token);
                }
            }
        }

        @Override
        public void onHotspotNetworksUpdated(@NonNull List<HotspotNetwork> networks) {
            if (mCallback != null) {
@@ -247,13 +259,13 @@ public class SharedConnectivityManager {
                mService = null;
                synchronized (mProxyDataLock) {
                    if (!mCallbackProxyCache.isEmpty()) {
                        mCallbackProxyCache.keySet().forEach(
                                SharedConnectivityClientCallback::onServiceDisconnected);
                        mCallbackProxyCache.values().forEach(
                                SharedConnectivityCallbackProxy::onServiceDisconnected);
                        mCallbackProxyCache.clear();
                    }
                    if (!mProxyMap.isEmpty()) {
                        mProxyMap.keySet().forEach(
                                SharedConnectivityClientCallback::onServiceDisconnected);
                        mProxyMap.values().forEach(
                                SharedConnectivityCallbackProxy::onServiceDisconnected);
                        mProxyMap.clear();
                    }
                }
+1 −0
Original line number Diff line number Diff line
@@ -32,4 +32,5 @@ interface ISharedConnectivityCallback {
    oneway void onKnownNetworkConnectionStatusChanged(in KnownNetworkConnectionStatus status);
    oneway void onSharedConnectivitySettingsChanged(in SharedConnectivitySettingsState state);
    oneway void onServiceConnected();
    oneway void onServiceDisconnected();
}