diff options
author | Etan Cohen <etancohen@google.com> | 2017-06-01 09:44:47 -0700 |
---|---|---|
committer | Etan Cohen <etancohen@google.com> | 2017-06-01 09:44:47 -0700 |
commit | 4fe311c774d6880c2eb9aa38ece9f9a5a60f7bd7 (patch) | |
tree | d42fe99730bb3354ee8374eecde01e9a7c3cff89 /service/java/com/android/server | |
parent | 855b441bf2cf87885dd933e55035843871b4c30e (diff) | |
download | wifi-4fe311c774d6880c2eb9aa38ece9f9a5a60f7bd7.tar.gz |
[HDM] Fix access to HDM before Wi-Fi is started
A couple of synchronization issues:
1. Wifi vendor queries features even before Wi-Fi is started. HDM
cannot be accessed without it - caused invalid chip ID messages.
2. Added synchronization and log printouts to additional public HDM
methods.
Bug: 62238717
Test: observed issue resolved based on logs
Change-Id: I771b6f040127814bab5a71f8ee9ebf2d7771ae7b
Diffstat (limited to 'service/java/com/android/server')
-rw-r--r-- | service/java/com/android/server/wifi/HalDeviceManager.java | 28 | ||||
-rw-r--r-- | service/java/com/android/server/wifi/WifiVendorHal.java | 3 |
2 files changed, 22 insertions, 9 deletions
diff --git a/service/java/com/android/server/wifi/HalDeviceManager.java b/service/java/com/android/server/wifi/HalDeviceManager.java index e58efd751..0042f6a8a 100644 --- a/service/java/com/android/server/wifi/HalDeviceManager.java +++ b/service/java/com/android/server/wifi/HalDeviceManager.java @@ -303,9 +303,13 @@ public class HalDeviceManager { */ public void registerInterfaceAvailableForRequestListener(int ifaceType, InterfaceAvailableForRequestListener listener, Looper looper) { - mInterfaceAvailableForRequestListeners.get(ifaceType).add( - new InterfaceAvailableForRequestListenerProxy(listener, - looper == null ? Looper.myLooper() : looper)); + if (DBG) Log.d(TAG, "registerInterfaceAvailableForRequestListener: ifaceType=" + ifaceType); + + synchronized (mLock) { + mInterfaceAvailableForRequestListeners.get(ifaceType).add( + new InterfaceAvailableForRequestListenerProxy(listener, + looper == null ? Looper.myLooper() : looper)); + } WifiChipInfo[] chipInfos = getAllChipInfo(); if (chipInfos == null) { @@ -323,12 +327,18 @@ public class HalDeviceManager { public void unregisterInterfaceAvailableForRequestListener( int ifaceType, InterfaceAvailableForRequestListener listener) { - Iterator<InterfaceAvailableForRequestListenerProxy> it = - mInterfaceAvailableForRequestListeners.get(ifaceType).iterator(); - while (it.hasNext()) { - if (it.next().mListener == listener) { - it.remove(); - return; + if (DBG) { + Log.d(TAG, "unregisterInterfaceAvailableForRequestListener: ifaceType=" + ifaceType); + } + + synchronized (mLock) { + Iterator<InterfaceAvailableForRequestListenerProxy> it = + mInterfaceAvailableForRequestListeners.get(ifaceType).iterator(); + while (it.hasNext()) { + if (it.next().mListener == listener) { + it.remove(); + return; + } } } } diff --git a/service/java/com/android/server/wifi/WifiVendorHal.java b/service/java/com/android/server/wifi/WifiVendorHal.java index 9c1ae94b5..3da5ef979 100644 --- a/service/java/com/android/server/wifi/WifiVendorHal.java +++ b/service/java/com/android/server/wifi/WifiVendorHal.java @@ -840,6 +840,9 @@ public class WifiVendorHal { */ public int getSupportedFeatureSet() { int featureSet = 0; + if (!mHalDeviceManager.isStarted()) { + return featureSet; // TODO: can't get capabilities with Wi-Fi down + } try { final MutableInt feat = new MutableInt(0); synchronized (sLock) { |