mirror of
https://github.com/espressif/esp-idf.git
synced 2026-04-27 19:13:21 +00:00
fix(esp_wifi): Fix memory leak caused due to eloop
- Fix memory leak when eloop timer is in eloop queue and esp_wifi_deinit is called - Return error on long timeout - Fix memory leak when register timeout returns error
This commit is contained in:
committed by
Kapil Gupta
parent
7515249364
commit
0c65a4a345
@@ -740,7 +740,10 @@ static int esp_supp_rx_action(uint8_t *hdr, uint8_t *payload, size_t len, uint8_
|
|||||||
rx_param->frm_len = len;
|
rx_param->frm_len = len;
|
||||||
os_memcpy(rx_param->action_frm, payload, len);
|
os_memcpy(rx_param->action_frm, payload, len);
|
||||||
|
|
||||||
eloop_register_timeout(0, 0, esp_dpp_rx_action, rx_param, NULL);
|
if (eloop_register_timeout(0, 0, esp_dpp_rx_action, rx_param, NULL) != 0) {
|
||||||
|
os_free(rx_param);
|
||||||
|
return ESP_ERR_NO_MEM;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
@@ -545,7 +545,10 @@ bool wpa_ap_remove(u8* bssid)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
os_memcpy(addr, sta->addr, ETH_ALEN);
|
os_memcpy(addr, sta->addr, ETH_ALEN);
|
||||||
eloop_register_timeout(0, 10000, ap_free_sta_timeout, hapd, addr);
|
if (eloop_register_timeout(0, 10000, ap_free_sta_timeout, hapd, addr) != 0) {
|
||||||
|
os_free(addr);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
ap_free_sta(hapd, sta);
|
ap_free_sta(hapd, sta);
|
||||||
|
|||||||
@@ -169,7 +169,7 @@ overflow:
|
|||||||
"ELOOP: Too long timeout (secs=%u usecs=%u) to ever happen - ignore it",
|
"ELOOP: Too long timeout (secs=%u usecs=%u) to ever happen - ignore it",
|
||||||
secs, usecs);
|
secs, usecs);
|
||||||
os_free(timeout);
|
os_free(timeout);
|
||||||
return 0;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef ELOOP_DEBUG
|
#ifdef ELOOP_DEBUG
|
||||||
@@ -526,6 +526,9 @@ void eloop_destroy(void)
|
|||||||
sec, usec, timeout->eloop_data, timeout->user_data,
|
sec, usec, timeout->eloop_data, timeout->user_data,
|
||||||
timeout->handler);
|
timeout->handler);
|
||||||
#endif
|
#endif
|
||||||
|
if (timeout->handler) {
|
||||||
|
timeout->handler(timeout->eloop_data, timeout->user_data);
|
||||||
|
}
|
||||||
eloop_remove_timeout(timeout);
|
eloop_remove_timeout(timeout);
|
||||||
}
|
}
|
||||||
if (eloop_data_lock) {
|
if (eloop_data_lock) {
|
||||||
|
|||||||
Reference in New Issue
Block a user