diff options
author | Mitchell Wills <mwills@google.com> | 2016-03-11 17:16:50 -0800 |
---|---|---|
committer | Mitchell Wills <mwills@google.com> | 2016-03-14 10:32:39 -0700 |
commit | 1e806a7aac77f6f65ba299329e1fc452e0148b8d (patch) | |
tree | a64967f000e3ae922f348390b6be7965a0dfae28 /service | |
parent | 9b34eab6963479d468e6ab7859c3721b2d1e17f8 (diff) |
Fix WifiScanner not recovering after Wifi is turned off
WifiScanner implementations could previously get in an inconsistent
state where they had not cleaned up from a previous scan that was
interrupted by turning Wifi off.
Bug: 27620477
Change-Id: I042e35d1aa8ee65e6ebfeb6f62a54c071a7be4ef
Diffstat (limited to 'service')
4 files changed, 32 insertions, 1 deletions
diff --git a/service/java/com/android/server/wifi/HalWifiScannerImpl.java b/service/java/com/android/server/wifi/HalWifiScannerImpl.java index c678c7302..ebb5f36ed 100644 --- a/service/java/com/android/server/wifi/HalWifiScannerImpl.java +++ b/service/java/com/android/server/wifi/HalWifiScannerImpl.java @@ -75,6 +75,7 @@ public class HalWifiScannerImpl extends WifiScannerImpl implements Handler.Callb } else { Log.w(TAG, "Got single scan failed event without an active scan request"); } + mWifiNative.resumeBackgroundScan(); break; case WifiMonitor.SCAN_RESULTS_EVENT: pollLatestSingleScanData(); @@ -174,6 +175,12 @@ public class HalWifiScannerImpl extends WifiScannerImpl implements Handler.Callb } @Override + public void cleanup() { + mSingleScanEventHandler = null; + mWifiNative.resumeBackgroundScan(); + } + + @Override public boolean getScanCapabilities(WifiNative.ScanCapabilities capabilities) { return mWifiNative.getScanCapabilities(capabilities); } diff --git a/service/java/com/android/server/wifi/SupplicantWifiScannerImpl.java b/service/java/com/android/server/wifi/SupplicantWifiScannerImpl.java index 05f602090..91747808a 100644 --- a/service/java/com/android/server/wifi/SupplicantWifiScannerImpl.java +++ b/service/java/com/android/server/wifi/SupplicantWifiScannerImpl.java @@ -115,6 +115,19 @@ public class SupplicantWifiScannerImpl extends WifiScannerImpl implements Handle } @Override + public void cleanup() { + synchronized (mSettingsLock) { + mPendingSingleScanSettings = null; + mPendingSingleScanEventHandler = null; + stopPnoScan(); + stopBatchedScan(); + resetHotlist(); + untrackSignificantWifiChange(); + mLastScanSettings = null; // finally clear any active scan + } + } + + @Override public boolean getScanCapabilities(WifiNative.ScanCapabilities capabilities) { capabilities.max_scan_cache_size = Integer.MAX_VALUE; capabilities.max_scan_buckets = MAX_SCAN_BUCKETS; @@ -213,6 +226,7 @@ public class SupplicantWifiScannerImpl extends WifiScannerImpl implements Handle mBackgroundScanPeriodPending = false; unscheduleScansLocked(); } + processPendingScans(); } @Override @@ -236,6 +250,7 @@ public class SupplicantWifiScannerImpl extends WifiScannerImpl implements Handle mPendingBackgroundScanEventHandler.onScanPaused(results); } } + processPendingScans(); } @Override @@ -312,7 +327,9 @@ public class SupplicantWifiScannerImpl extends WifiScannerImpl implements Handle private void unscheduleScansLocked() { mAlarmManager.cancel(mScanPeriodListener); - mLastScanSettings = null; // make sure that a running scan is marked as ended + if (mLastScanSettings != null) { + mLastScanSettings.backgroundScanActive = false; + } } private void handleScanPeriod() { diff --git a/service/java/com/android/server/wifi/WifiScannerImpl.java b/service/java/com/android/server/wifi/WifiScannerImpl.java index 41c356c29..c8d80fde5 100644 --- a/service/java/com/android/server/wifi/WifiScannerImpl.java +++ b/service/java/com/android/server/wifi/WifiScannerImpl.java @@ -63,6 +63,12 @@ public abstract class WifiScannerImpl { }; /** + * Cleanup any ongoing operations. This may be called when the driver is unloaded. + * There is no expectation that failure events are returned for ongoing operations. + */ + public abstract void cleanup(); + + /** * Get the supported scan capabilities. * * @param capabilities Object that will be filled with the supported capabilities if successful diff --git a/service/java/com/android/server/wifi/WifiScanningServiceImpl.java b/service/java/com/android/server/wifi/WifiScanningServiceImpl.java index 8de44f72f..58ddd579f 100644 --- a/service/java/com/android/server/wifi/WifiScanningServiceImpl.java +++ b/service/java/com/android/server/wifi/WifiScanningServiceImpl.java @@ -802,6 +802,7 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub { public void exit() { sendPnoScanFailedToAllAndClear( WifiScanner.REASON_UNSPECIFIED, "Scan was interrupted"); + mScannerImpl.cleanup(); } @Override |