mirror of
https://github.com/espressif/ESP8266_RTOS_SDK.git
synced 2025-06-04 20:53:06 +08:00
fix(lwip): Fix socket multi-thread has no socket offset check
This commit is contained in:
@ -170,12 +170,12 @@ static volatile sock_mt_t DRAM_ATTR sockets_mt[NUM_SOCKETS];
|
|||||||
|
|
||||||
static inline void _sock_mt_init(int s)
|
static inline void _sock_mt_init(int s)
|
||||||
{
|
{
|
||||||
memset((void *)&sockets_mt[s], 0, sizeof(sock_mt_t));
|
memset((void *)&sockets_mt[s - LWIP_SOCKET_OFFSET], 0, sizeof(sock_mt_t));
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int _sock_is_opened(int s)
|
static inline int _sock_is_opened(int s)
|
||||||
{
|
{
|
||||||
return sockets_mt[s].opened != 0;
|
return sockets_mt[s - LWIP_SOCKET_OFFSET].opened != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void _sock_set_open(int s, int opened)
|
static inline void _sock_set_open(int s, int opened)
|
||||||
@ -183,7 +183,7 @@ static inline void _sock_set_open(int s, int opened)
|
|||||||
SYS_ARCH_DECL_PROTECT(lev);
|
SYS_ARCH_DECL_PROTECT(lev);
|
||||||
|
|
||||||
SYS_ARCH_PROTECT(lev);
|
SYS_ARCH_PROTECT(lev);
|
||||||
sockets_mt[s].opened = opened;
|
sockets_mt[s - LWIP_SOCKET_OFFSET].opened = opened;
|
||||||
SYS_ARCH_UNPROTECT(lev);
|
SYS_ARCH_UNPROTECT(lev);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -192,23 +192,23 @@ static inline void _sock_set_state(int s, int state)
|
|||||||
SYS_ARCH_DECL_PROTECT(lev);
|
SYS_ARCH_DECL_PROTECT(lev);
|
||||||
|
|
||||||
SYS_ARCH_PROTECT(lev);
|
SYS_ARCH_PROTECT(lev);
|
||||||
sockets_mt[s].state = state;
|
sockets_mt[s - LWIP_SOCKET_OFFSET].state = state;
|
||||||
SYS_ARCH_UNPROTECT(lev);
|
SYS_ARCH_UNPROTECT(lev);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int _sock_get_state(int s)
|
static inline int _sock_get_state(int s)
|
||||||
{
|
{
|
||||||
return sockets_mt[s].state;
|
return sockets_mt[s - LWIP_SOCKET_OFFSET].state;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int _sock_get_select(int s, int select)
|
static inline int _sock_get_select(int s, int select)
|
||||||
{
|
{
|
||||||
return sockets_mt[s].select & select;
|
return sockets_mt[s - LWIP_SOCKET_OFFSET].select & select;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int inline _sock_is_lock(int s, int l)
|
static int inline _sock_is_lock(int s, int l)
|
||||||
{
|
{
|
||||||
return sockets_mt[s].lock & l;
|
return sockets_mt[s - LWIP_SOCKET_OFFSET].lock & l;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int inline _sock_next_lock(int lock)
|
static int inline _sock_next_lock(int lock)
|
||||||
@ -221,7 +221,7 @@ static void inline _sock_set_select(int s, int select)
|
|||||||
SYS_ARCH_DECL_PROTECT(lev);
|
SYS_ARCH_DECL_PROTECT(lev);
|
||||||
|
|
||||||
SYS_ARCH_PROTECT(lev);
|
SYS_ARCH_PROTECT(lev);
|
||||||
sockets_mt[s].select |= select;
|
sockets_mt[s - LWIP_SOCKET_OFFSET].select |= select;
|
||||||
SYS_ARCH_UNPROTECT(lev);
|
SYS_ARCH_UNPROTECT(lev);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -230,7 +230,7 @@ static void inline _sock_reset_select(int s, int select)
|
|||||||
SYS_ARCH_DECL_PROTECT(lev);
|
SYS_ARCH_DECL_PROTECT(lev);
|
||||||
|
|
||||||
SYS_ARCH_PROTECT(lev);
|
SYS_ARCH_PROTECT(lev);
|
||||||
sockets_mt[s].select &= ~select;
|
sockets_mt[s - LWIP_SOCKET_OFFSET].select &= ~select;
|
||||||
SYS_ARCH_UNPROTECT(lev);
|
SYS_ARCH_UNPROTECT(lev);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -244,13 +244,13 @@ static int _sock_try_lock(int s, int l)
|
|||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sockets_mt[s].lock & l) {
|
if (sockets_mt[s - LWIP_SOCKET_OFFSET].lock & l) {
|
||||||
ret = ERR_INPROGRESS;
|
ret = ERR_INPROGRESS;
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
SYS_ARCH_PROTECT(lev);
|
SYS_ARCH_PROTECT(lev);
|
||||||
sockets_mt[s].lock |= l;
|
sockets_mt[s - LWIP_SOCKET_OFFSET].lock |= l;
|
||||||
SYS_ARCH_UNPROTECT(lev);
|
SYS_ARCH_UNPROTECT(lev);
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
@ -287,7 +287,7 @@ static int _sock_unlock(int s, int l)
|
|||||||
SOCK_MT_DEBUG(1, "s %d l %d exit ", s, l);
|
SOCK_MT_DEBUG(1, "s %d l %d exit ", s, l);
|
||||||
|
|
||||||
SYS_ARCH_PROTECT(lev);
|
SYS_ARCH_PROTECT(lev);
|
||||||
sockets_mt[s].lock &= ~l;
|
sockets_mt[s - LWIP_SOCKET_OFFSET].lock &= ~l;
|
||||||
SYS_ARCH_UNPROTECT(lev);
|
SYS_ARCH_UNPROTECT(lev);
|
||||||
|
|
||||||
if (!_sock_is_opened(s)) {
|
if (!_sock_is_opened(s)) {
|
||||||
@ -305,7 +305,7 @@ static int lwip_enter_mt_select(int s, fd_set *read_set, fd_set *write_set)
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (s > NUM_SOCKETS || s < 0)
|
if (s > NUM_SOCKETS + LWIP_SOCKET_OFFSET || s < LWIP_SOCKET_OFFSET)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
for (i = 0; i < s; i++) {
|
for (i = 0; i < s; i++) {
|
||||||
|
Reference in New Issue
Block a user