diff --git a/cpu/esp8266/esp-wifi/esp_wifi_netdev.c b/cpu/esp8266/esp-wifi/esp_wifi_netdev.c
index 7ffe51695fec435683b5b6c51a67c11c692cb52e..80a18ffa8f54a7b76e869f29ce1852eb737689f3 100644
--- a/cpu/esp8266/esp-wifi/esp_wifi_netdev.c
+++ b/cpu/esp8266/esp-wifi/esp_wifi_netdev.c
@@ -251,15 +251,18 @@ static int _send(netdev_t *netdev, const iolist_t *iolist)
 
     esp_wifi_netdev_t *dev = (esp_wifi_netdev_t*)netdev;
 
+    critical_enter();
     if (!dev->connected) {
         ESP_WIFI_DEBUG("WiFi is still not connected to AP, cannot send");
         _in_send = false;
+        critical_exit();
         return -EIO;
     }
 
     if (wifi_get_opmode() != ESP_WIFI_STATION_MODE) {
         ESP_WIFI_DEBUG("WiFi is not in station mode, cannot send");
         _in_send = false;
+        critical_exit();
         return -EIO;
     }
 
@@ -277,6 +280,7 @@ static int _send(netdev_t *netdev, const iolist_t *iolist)
         ESP_WIFI_DEBUG("frame length exceeds maximum (%u > %u)",
                        iol_len, ETHERNET_MAX_LEN);
         _in_send = false;
+        critical_exit();
         return -EBADMSG;
     }
 
@@ -284,6 +288,7 @@ static int _send(netdev_t *netdev, const iolist_t *iolist)
         ESP_WIFI_DEBUG("frame length is less than the size of an Ethernet"
                        "header (%u < %u)", iol_len, sizeof(ethernet_hdr_t));
         _in_send = false;
+        critical_exit();
         return -EBADMSG;
     }
 
@@ -293,6 +298,7 @@ static int _send(netdev_t *netdev, const iolist_t *iolist)
     struct pbuf *pb = pbuf_alloc(PBUF_LINK, iol_len, PBUF_RAM);
     if (pb == NULL || pb->tot_len < iol_len) {
         ESP_WIFI_DEBUG("could not allocate buffer to send %d bytes ", iol_len);
+        critical_exit();
         _in_send = false;
         return -EIO;
     }
@@ -339,6 +345,7 @@ static int _send(netdev_t *netdev, const iolist_t *iolist)
         netdev->event_callback(netdev, NETDEV_EVENT_TX_COMPLETE);
 #endif
         _in_send = false;
+        critical_exit();
         return iol_len;
     }
     else {
@@ -346,6 +353,7 @@ static int _send(netdev_t *netdev, const iolist_t *iolist)
         netdev->stats.tx_failed++;
 #endif
         _in_send = false;
+        critical_exit();
         return -EIO;
     }
 }
@@ -401,8 +409,8 @@ static int _recv(netdev_t *netdev, void *buf, size_t len, void *info)
     netdev->stats.rx_bytes += size;
 #endif
 
-   mutex_unlock(&dev->dev_lock);
-         return size;
+    mutex_unlock(&dev->dev_lock);
+    return size;
 }
 
 static int _get(netdev_t *netdev, netopt_t opt, void *val, size_t max_len)