cpu/esp8266: react to "out of memory" in esp_wifi
This commit is contained in:
parent
35a751c245
commit
0e46869e57
@ -298,7 +298,19 @@ static int _send(netdev_t *netdev, const iolist_t *iolist)
|
|||||||
struct pbuf *pb = pbuf_alloc(PBUF_LINK, iol_len, PBUF_RAM);
|
struct pbuf *pb = pbuf_alloc(PBUF_LINK, iol_len, PBUF_RAM);
|
||||||
if (pb == NULL || pb->tot_len < iol_len) {
|
if (pb == NULL || pb->tot_len < iol_len) {
|
||||||
ESP_WIFI_DEBUG("could not allocate buffer to send %d bytes ", iol_len);
|
ESP_WIFI_DEBUG("could not allocate buffer to send %d bytes ", iol_len);
|
||||||
|
/*
|
||||||
|
* The memory of EPS8266 is quite small. Therefore, it may happen on
|
||||||
|
* haevy network load that we run into out of memory and we have
|
||||||
|
* to wait until lwIP pbuf has been flushed. For that purpose, we
|
||||||
|
* have to disconnect from AP and slow down sending. The node will
|
||||||
|
* then reconnect to AP automatically.
|
||||||
|
*/
|
||||||
critical_exit();
|
critical_exit();
|
||||||
|
/* disconnect from AP */
|
||||||
|
wifi_station_disconnect();
|
||||||
|
/* wait 20 ms */
|
||||||
|
xtimer_usleep(20 * US_PER_MS);
|
||||||
|
|
||||||
_in_send = false;
|
_in_send = false;
|
||||||
return -EIO;
|
return -EIO;
|
||||||
}
|
}
|
||||||
@ -354,6 +366,13 @@ static int _send(netdev_t *netdev, const iolist_t *iolist)
|
|||||||
#endif
|
#endif
|
||||||
_in_send = false;
|
_in_send = false;
|
||||||
critical_exit();
|
critical_exit();
|
||||||
|
/*
|
||||||
|
* This error usually happens because we run into out of memory. We have
|
||||||
|
* to wait until lwIP pbuf has been flushed. For that purpose, we
|
||||||
|
* have to disconnect from AP and wait for a short time. The node will
|
||||||
|
* then reconnect to AP automatically.
|
||||||
|
*/
|
||||||
|
wifi_station_disconnect();
|
||||||
return -EIO;
|
return -EIO;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user