summaryrefslogtreecommitdiff
path: root/service/java/com
diff options
context:
space:
mode:
authorEtan Cohen <etancohen@google.com>2017-06-01 09:44:47 -0700
committerEtan Cohen <etancohen@google.com>2017-06-01 09:44:47 -0700
commit4fe311c774d6880c2eb9aa38ece9f9a5a60f7bd7 (patch)
treed42fe99730bb3354ee8374eecde01e9a7c3cff89 /service/java/com
parent855b441bf2cf87885dd933e55035843871b4c30e (diff)
downloadwifi-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')
-rw-r--r--service/java/com/android/server/wifi/HalDeviceManager.java28
-rw-r--r--service/java/com/android/server/wifi/WifiVendorHal.java3
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) {