Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 59873fc

Browse files
committed
Merge branch 'bugfix/fix_reenter_close' into 'master'
lfix reenter lwip_close See merge request sdk/ESP8266_RTOS_SDK!954
2 parents 9f400bb + 812fc52 commit 59873fc

File tree

1 file changed

+16
-2
lines changed

1 file changed

+16
-2
lines changed

components/lwip/apps/multi-threads/sockets_mt.c

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -661,6 +661,9 @@ int lwip_getsockopt(int s, int level, int optname, void *optval, socklen_t *optl
661661
{
662662
int ret;
663663

664+
if (tryget_socket(s) == NULL)
665+
return -1;
666+
664667
if (optname == SO_ERROR) {
665668
int retval = 0;
666669

@@ -772,15 +775,26 @@ int lwip_shutdown(int s, int how)
772775
int lwip_close(int s)
773776
{
774777
int ret;
778+
SYS_ARCH_DECL_PROTECT(lev);
779+
780+
if (tryget_socket(s) == NULL)
781+
return -1;
782+
783+
SYS_ARCH_PROTECT(lev);
784+
if (_sock_is_opened(s)) {
785+
_sock_set_open(s, 0);
786+
SYS_ARCH_UNPROTECT(lev);
787+
} else {
788+
SYS_ARCH_UNPROTECT(lev);
789+
return -1;
790+
}
775791

776792
#if ESP_UDP
777793
struct lwip_sock *sock = get_socket(s);
778794
if (sock)
779795
udp_sync_close_netconn(sock->conn);
780796
#endif
781797

782-
_sock_set_open(s, 0);
783-
784798
lwip_sync_mt(s, SHUT_RDWR);
785799

786800
ret = lwip_close_esp(s);

0 commit comments

Comments
 (0)