mirror of
https://git.savannah.nongnu.org/git/lwip.git
synced 2025-08-04 13:34:38 +08:00
lock event_callback against lwip_accept for data that arrives right away after an accept (before lwip_accept has processed the new conn)
This commit is contained in:
parent
77d9233427
commit
9343b767f8
@ -989,16 +989,24 @@ event_callback(struct netconn *conn, enum netconn_evt evt, u16_t len)
|
|||||||
* Just count down (or up) if that's the case and we
|
* Just count down (or up) if that's the case and we
|
||||||
* will use the data later. Note that only receive events
|
* will use the data later. Note that only receive events
|
||||||
* can happen before the new socket is set up. */
|
* can happen before the new socket is set up. */
|
||||||
if (evt == NETCONN_EVT_RCVPLUS)
|
sys_sem_wait(socksem);
|
||||||
|
if (conn->socket < 0) {
|
||||||
|
if (evt == NETCONN_EVT_RCVPLUS) {
|
||||||
conn->socket--;
|
conn->socket--;
|
||||||
|
}
|
||||||
|
sys_sem_signal(socksem);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
sys_sem_signal(socksem);
|
||||||
|
}
|
||||||
|
|
||||||
sock = get_socket(s);
|
sock = get_socket(s);
|
||||||
if (!sock)
|
if (!sock) {
|
||||||
return;
|
return;
|
||||||
} else
|
}
|
||||||
|
} else {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
sys_sem_wait(selectsem);
|
sys_sem_wait(selectsem);
|
||||||
/* Set event as required */
|
/* Set event as required */
|
||||||
@ -1015,6 +1023,9 @@ event_callback(struct netconn *conn, enum netconn_evt evt, u16_t len)
|
|||||||
case NETCONN_EVT_SENDMINUS:
|
case NETCONN_EVT_SENDMINUS:
|
||||||
sock->sendevent = 0;
|
sock->sendevent = 0;
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
LWIP_ASSERT("unknown event", 0);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
sys_sem_signal(selectsem);
|
sys_sem_signal(selectsem);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user