From 49a45ccb752fae9ea4e4dba37b94249366b7fba1 Mon Sep 17 00:00:00 2001 From: TD-er Date: Tue, 11 Mar 2025 22:43:27 +0100 Subject: [PATCH] [WiFiScan] Fix clear 'scanning bit' and clear scanCount `WIFI_SCANNING_BIT` may not always be cleared on timeout. Also `_scanCount` will only be cleared if there is a `_scanResult`. See: https://github.com/espressif/arduino-esp32/issues/8952 --- libraries/WiFi/src/WiFiScan.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/libraries/WiFi/src/WiFiScan.cpp b/libraries/WiFi/src/WiFiScan.cpp index 27d9edcc70c..172727fe5b2 100644 --- a/libraries/WiFi/src/WiFiScan.cpp +++ b/libraries/WiFi/src/WiFiScan.cpp @@ -160,9 +160,6 @@ int16_t WiFiScanClass::scanComplete() { return WiFiScanClass::_scanCount; } - if (WiFiGenericClass::getStatusBits() & WIFI_SCANNING_BIT) { - return WIFI_SCAN_RUNNING; - } // last one to avoid time affecting Async mode if (WiFiScanClass::_scanStarted && (millis() - WiFiScanClass::_scanStarted) @@ -171,6 +168,10 @@ int16_t WiFiScanClass::scanComplete() { return WIFI_SCAN_FAILED; } + if (WiFiGenericClass::getStatusBits() & WIFI_SCANNING_BIT) { + return WIFI_SCAN_RUNNING; + } + return WIFI_SCAN_FAILED; } @@ -179,11 +180,12 @@ int16_t WiFiScanClass::scanComplete() { */ void WiFiScanClass::scanDelete() { WiFiGenericClass::clearStatusBits(WIFI_SCAN_DONE_BIT); + WiFiGenericClass::clearStatusBits(WIFI_SCANNING_BIT); if (WiFiScanClass::_scanResult) { delete[] reinterpret_cast(WiFiScanClass::_scanResult); WiFiScanClass::_scanResult = nullptr; - WiFiScanClass::_scanCount = 0; } + WiFiScanClass::_scanCount = 0; } /**