mirror of
https://github.com/lwip-tcpip/lwip.git
synced 2025-01-04 02:39:15 +00:00
Fix netconn/socket race condition when receiving RST while waiting on recvmbox
This commit is contained in:
parent
ed239c4e71
commit
0a343948d9
@ -544,6 +544,10 @@ netconn_recv_data(struct netconn *conn, void **new_buf)
|
|||||||
/* If we are closed, we indicate that we no longer wish to use the socket */
|
/* If we are closed, we indicate that we no longer wish to use the socket */
|
||||||
if (buf == NULL) {
|
if (buf == NULL) {
|
||||||
API_EVENT(conn, NETCONN_EVT_RCVMINUS, 0);
|
API_EVENT(conn, NETCONN_EVT_RCVMINUS, 0);
|
||||||
|
if (conn->pcb.ip == NULL) {
|
||||||
|
/* race condition: RST during recv */
|
||||||
|
return conn->last_err == ERR_OK ? ERR_RST : conn->last_err;
|
||||||
|
}
|
||||||
/* RX side is closed, so deallocate the recvmbox */
|
/* RX side is closed, so deallocate the recvmbox */
|
||||||
netconn_close_shutdown(conn, NETCONN_SHUT_RD);
|
netconn_close_shutdown(conn, NETCONN_SHUT_RD);
|
||||||
/* Don' store ERR_CLSD as conn->err since we are only half-closed */
|
/* Don' store ERR_CLSD as conn->err since we are only half-closed */
|
||||||
|
Loading…
Reference in New Issue
Block a user