mirror of
https://github.com/espressif/ESP8266_RTOS_SDK.git
synced 2025-06-01 16:16:54 +08:00
fix(lwip): Fix sync connect/send error
This commit is contained in:
@ -329,14 +329,6 @@ typedef struct _sock_mt sock_mt_t;
|
|||||||
#define SOCK_MT_GET_SEL(s) \
|
#define SOCK_MT_GET_SEL(s) \
|
||||||
sockets_mt[s].sel
|
sockets_mt[s].sel
|
||||||
|
|
||||||
#define SOCK_MT_SET_LINGER(sock) \
|
|
||||||
{ \
|
|
||||||
SYS_ARCH_DECL_PROTECT(lev); \
|
|
||||||
SYS_ARCH_PROTECT(lev); \
|
|
||||||
sock->conn->linger = 1; \
|
|
||||||
SYS_ARCH_UNPROTECT(lev); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define LWIP_ENTER_MT(s, m, p) \
|
#define LWIP_ENTER_MT(s, m, p) \
|
||||||
{ \
|
{ \
|
||||||
int r; \
|
int r; \
|
||||||
@ -579,6 +571,8 @@ static void lwip_do_sync_send(void *arg)
|
|||||||
SYS_ARCH_PROTECT(lev);
|
SYS_ARCH_PROTECT(lev);
|
||||||
if (conn->current_msg) {
|
if (conn->current_msg) {
|
||||||
conn->current_msg->err = ERR_OK;
|
conn->current_msg->err = ERR_OK;
|
||||||
|
if (conn->current_msg && sys_sem_valid(conn->current_msg->op_completed_sem))
|
||||||
|
sys_sem_signal(conn->current_msg->op_completed_sem);
|
||||||
conn->current_msg = NULL;
|
conn->current_msg = NULL;
|
||||||
}
|
}
|
||||||
conn->state = NETCONN_NONE;
|
conn->state = NETCONN_NONE;
|
||||||
@ -609,6 +603,7 @@ static void lwip_sync_state_mt(struct lwip_sock *sock, int state)
|
|||||||
if (sys_mbox_valid(&sock->conn->acceptmbox))
|
if (sys_mbox_valid(&sock->conn->acceptmbox))
|
||||||
sys_mbox_trypost(&sock->conn->acceptmbox, NULL);
|
sys_mbox_trypost(&sock->conn->acceptmbox, NULL);
|
||||||
break;
|
break;
|
||||||
|
case SOCK_MT_STATE_CONNECT:
|
||||||
case SOCK_MT_STATE_SEND :
|
case SOCK_MT_STATE_SEND :
|
||||||
{
|
{
|
||||||
socket_conn_sync_t sync;
|
socket_conn_sync_t sync;
|
||||||
@ -620,10 +615,6 @@ static void lwip_sync_state_mt(struct lwip_sock *sock, int state)
|
|||||||
sys_arch_sem_wait(sync.sem, 0);
|
sys_arch_sem_wait(sync.sem, 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SOCK_MT_STATE_CONNECT :
|
|
||||||
if (sock->conn->current_msg && sys_sem_valid(sock->conn->current_msg->op_completed_sem))
|
|
||||||
sys_sem_signal(sock->conn->current_msg->op_completed_sem);
|
|
||||||
break;
|
|
||||||
default :
|
default :
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -672,11 +663,9 @@ static inline bool is_need_sync(int s, int how, int module)
|
|||||||
static void lwip_sync_mt(int s, int how)
|
static void lwip_sync_mt(int s, int how)
|
||||||
{
|
{
|
||||||
int module = 0;
|
int module = 0;
|
||||||
int ret;
|
|
||||||
struct lwip_sock *sock;
|
struct lwip_sock *sock;
|
||||||
|
|
||||||
while (module < SOCK_MT_SELECT) {
|
while (module < SOCK_MT_SELECT) {
|
||||||
int skip = 0;
|
|
||||||
extern void sys_arch_msleep(int ms);
|
extern void sys_arch_msleep(int ms);
|
||||||
|
|
||||||
if (is_need_sync(s, how, module) == false) {
|
if (is_need_sync(s, how, module) == false) {
|
||||||
@ -685,11 +674,6 @@ static void lwip_sync_mt(int s, int how)
|
|||||||
}
|
}
|
||||||
|
|
||||||
sock = get_socket(s);
|
sock = get_socket(s);
|
||||||
#if LWIP_SO_LINGER
|
|
||||||
if (SOCK_MT_GET_STATE(s) == SOCK_MT_STATE_SEND) {
|
|
||||||
SOCK_MT_SET_LINGER(sock);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
if (!SOCK_MT_GET_SEL(s)) {
|
if (!SOCK_MT_GET_SEL(s)) {
|
||||||
switch (module) {
|
switch (module) {
|
||||||
case SOCK_MT_STATE:
|
case SOCK_MT_STATE:
|
||||||
|
Reference in New Issue
Block a user