Просмотр исходного кода

Merge branch 'bugfix/wifi_netif_on_off_cycle_race' into 'master'

wifi: Fix race conditon invoking invalid callback on deinit

Closes IDFGH-5880

See merge request espressif/esp-idf!15393
David Čermák 4 лет назад
Родитель
Сommit
ae4b8ea08e
2 измененных файлов с 10 добавлено и 0 удалено
  1. 5 0
      components/esp_wifi/src/wifi_init.c
  2. 5 0
      components/esp_wifi/src/wifi_netif.c

+ 5 - 0
components/esp_wifi/src/wifi_init.c

@@ -102,6 +102,11 @@ esp_err_t esp_wifi_deinit(void)
         return ESP_ERR_WIFI_NOT_STOPPED;
     }
 
+    if (esp_wifi_internal_reg_rxcb(WIFI_IF_STA,  NULL) != ESP_OK ||
+        esp_wifi_internal_reg_rxcb(WIFI_IF_AP,  NULL) != ESP_OK) {
+        ESP_LOGW(TAG, "Failed to unregister Rx callbacks");
+    }
+
     esp_supplicant_deinit();
     err = esp_wifi_deinit_internal();
     if (err != ESP_OK) {

+ 5 - 0
components/esp_wifi/src/wifi_netif.c

@@ -83,6 +83,11 @@ static esp_err_t wifi_driver_start(esp_netif_t * esp_netif, void * args)
 
 void esp_wifi_destroy_if_driver(wifi_netif_driver_t h)
 {
+    if (h) {
+        esp_wifi_internal_reg_rxcb(h->wifi_if, NULL);  // ignore the potential error
+                                                       // as the wifi might have been already uninitialized
+        s_wifi_netifs[h->wifi_if] = NULL;
+    }
     free(h);
 }