Merge branch 'bugfix/fix_shutdown_block_close' into 'release/v3.3'

fix(lwip): Fix "shutdown" blocks "close" when enable multi-thread support

See merge request sdk/ESP8266_RTOS_SDK!1418
This commit is contained in:
Dong Heng
2020-06-16 13:04:35 +08:00

View File

@ -494,14 +494,24 @@ static void lwip_sync_mt(int s, int how)
extern void sys_arch_msleep(int ms); extern void sys_arch_msleep(int ms);
if (!_sock_get_select(s, SOCK_MT_SELECT_RECV | SOCK_MT_SELECT_SEND)) { if (!_sock_get_select(s, SOCK_MT_SELECT_RECV | SOCK_MT_SELECT_SEND)) {
SOCK_MT_DEBUG(1, "lock state=%d how=%d\n", lock, how);
switch (lock) { switch (lock) {
case SOCK_MT_LOCK_SEND: case SOCK_MT_LOCK_SEND:
lwip_sync_state_mt(s); if (how == SHUT_WR || how == SHUT_RDWR) {
need_wait = 1; lwip_sync_state_mt(s);
need_wait = 1;
} else {
lock = _sock_next_lock(lock);
}
break; break;
case SOCK_MT_LOCK_RECV: case SOCK_MT_LOCK_RECV:
lwip_sync_recv_mt(s); if (how == SHUT_RD || how == SHUT_RDWR) {
need_wait = 1; lwip_sync_recv_mt(s);
need_wait = 1;
} else {
lock = _sock_next_lock(lock);
}
break; break;
default : default :
break; break;
@ -769,7 +779,24 @@ int lwip_fcntl(int s, int cmd, int val)
int lwip_shutdown(int s, int how) int lwip_shutdown(int s, int how)
{ {
return lwip_shutdown_esp(s, how); int ret;
SYS_ARCH_DECL_PROTECT(lev);
if (tryget_socket(s) == NULL)
return -1;
SYS_ARCH_PROTECT(lev);
if (!_sock_is_opened(s)) {
SYS_ARCH_UNPROTECT(lev);
return -1;
}
SYS_ARCH_UNPROTECT(lev);
lwip_sync_mt(s, how);
ret = lwip_shutdown_esp(s, how);
return ret;
} }
int lwip_close(int s) int lwip_close(int s)