]> granicus.if.org Git - esp-idf/commitdiff
lwip: fix nonblocking tcp close issue
authorLiu Zhi Fu <liuzhifu@espressif.com>
Sat, 14 Jul 2018 06:58:00 +0000 (14:58 +0800)
committerbot <bot@espressif.com>
Fri, 10 Aug 2018 06:21:56 +0000 (06:21 +0000)
Fix assert issue causes by closing nonblocking tcp socket.

components/lwip/api/sockets.c

index badde6613a920370b41d97fc045d46733c3010ac..184b1080be1ad5f84cbd3434ecb137223ba09773 100644 (file)
@@ -266,11 +266,11 @@ do{\
   }\
 }while(0)
 
-#define LWIP_SET_CLOSE_FLAG() \
+#define LWIP_SET_CLOSE_FLAG(_flag) \
 do{\
   LWIP_SOCK_LOCK(__sock);\
   LWIP_DEBUGF(ESP_THREAD_SAFE_DEBUG, ("mark sock closing\n"));\
-  __sock->state = LWIP_SOCK_CLOSING;\
+  __sock->state = (_flag);\
   LWIP_SOCK_UNLOCK(__sock);\
 }while(0)
 
@@ -3312,8 +3312,11 @@ int
 lwip_close_r(int s)
 {
   LWIP_API_LOCK();
-  LWIP_SET_CLOSE_FLAG();
+  LWIP_SET_CLOSE_FLAG(LWIP_SOCK_CLOSING);
   __ret = lwip_close(s);
+  if (EWOULDBLOCK == __sock->err) {
+    LWIP_SET_CLOSE_FLAG(LWIP_SOCK_OPEN);
+  }
   LWIP_API_UNLOCK();
 }