diff options
author | 2024-08-14 09:34:00 +0900 | |
---|---|---|
committer | 2024-08-14 11:15:45 +0900 | |
commit | fe817175426609cd16931ef7d4ca687c28f5c726 (patch) | |
tree | 89579c3b04b4486b30f31d99b847ef68a09710e4 /wifi/java/src | |
parent | e373737f35208b4bf6547f15a1ad52781c66d740 (diff) |
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
Diffstat (limited to 'wifi/java/src')
-rw-r--r-- | wifi/java/src/android/net/wifi/sharedconnectivity/app/SharedConnectivityManager.java | 20 | ||||
-rw-r--r-- | wifi/java/src/android/net/wifi/sharedconnectivity/service/ISharedConnectivityCallback.aidl | 1 |
2 files changed, 17 insertions, 4 deletions
diff --git a/wifi/java/src/android/net/wifi/sharedconnectivity/app/SharedConnectivityManager.java b/wifi/java/src/android/net/wifi/sharedconnectivity/app/SharedConnectivityManager.java index b0f68f7870ee..f68ae2c7e249 100644 --- a/wifi/java/src/android/net/wifi/sharedconnectivity/app/SharedConnectivityManager.java +++ b/wifi/java/src/android/net/wifi/sharedconnectivity/app/SharedConnectivityManager.java @@ -98,6 +98,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) { final long token = Binder.clearCallingIdentity(); @@ -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(); } } diff --git a/wifi/java/src/android/net/wifi/sharedconnectivity/service/ISharedConnectivityCallback.aidl b/wifi/java/src/android/net/wifi/sharedconnectivity/service/ISharedConnectivityCallback.aidl index 521f94367f6f..7b892af3c529 100644 --- a/wifi/java/src/android/net/wifi/sharedconnectivity/service/ISharedConnectivityCallback.aidl +++ b/wifi/java/src/android/net/wifi/sharedconnectivity/service/ISharedConnectivityCallback.aidl @@ -32,4 +32,5 @@ interface ISharedConnectivityCallback { oneway void onKnownNetworkConnectionStatusChanged(in KnownNetworkConnectionStatus status); oneway void onSharedConnectivitySettingsChanged(in SharedConnectivitySettingsState state); oneway void onServiceConnected(); + oneway void onServiceDisconnected(); } |