mirror of
https://github.com/lwip-tcpip/lwip.git
synced 2024-11-16 23:15:37 +00:00
fixed bug #34569: shutdown(SHUT_WR) crashes netconn/socket api
This commit is contained in:
parent
d8f090a759
commit
0da2bd7f62
@ -49,6 +49,9 @@ HISTORY
|
|||||||
|
|
||||||
++ Bugfixes:
|
++ Bugfixes:
|
||||||
|
|
||||||
|
2011-10-17: Simon Goldschmidt
|
||||||
|
* api_msg.c: fixed bug #34569: shutdown(SHUT_WR) crashes netconn/socket api
|
||||||
|
|
||||||
2011-10-13: Simon Goldschmidt
|
2011-10-13: Simon Goldschmidt
|
||||||
* tcp_in.c, tcp_out.c: fixed bug #34517 (persist timer is started although no
|
* tcp_in.c, tcp_out.c: fixed bug #34517 (persist timer is started although no
|
||||||
zero window is received) by starting the persist timer when a zero window is
|
zero window is received) by starting the persist timer when a zero window is
|
||||||
|
@ -774,21 +774,21 @@ do_close_internal(struct netconn *conn)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* Try to close the connection */
|
/* Try to close the connection */
|
||||||
if (shut == NETCONN_SHUT_RDWR) {
|
if (close) {
|
||||||
err = tcp_close(conn->pcb.tcp);
|
err = tcp_close(conn->pcb.tcp);
|
||||||
} else {
|
} else {
|
||||||
err = tcp_shutdown(conn->pcb.tcp, shut & NETCONN_SHUT_RD, shut & NETCONN_SHUT_WR);
|
err = tcp_shutdown(conn->pcb.tcp, shut_rx, shut_tx);
|
||||||
}
|
}
|
||||||
if (err == ERR_OK) {
|
if (err == ERR_OK) {
|
||||||
/* Closing succeeded */
|
/* Closing succeeded */
|
||||||
conn->current_msg->err = ERR_OK;
|
conn->current_msg->err = ERR_OK;
|
||||||
conn->current_msg = NULL;
|
conn->current_msg = NULL;
|
||||||
conn->state = NETCONN_NONE;
|
conn->state = NETCONN_NONE;
|
||||||
/* Set back some callback pointers as conn is going away */
|
|
||||||
conn->pcb.tcp = NULL;
|
|
||||||
/* Trigger select() in socket layer. Make sure everybody notices activity
|
|
||||||
on the connection, error first! */
|
|
||||||
if (close) {
|
if (close) {
|
||||||
|
/* Set back some callback pointers as conn is going away */
|
||||||
|
conn->pcb.tcp = NULL;
|
||||||
|
/* Trigger select() in socket layer. Make sure everybody notices activity
|
||||||
|
on the connection, error first! */
|
||||||
API_EVENT(conn, NETCONN_EVT_ERROR, 0);
|
API_EVENT(conn, NETCONN_EVT_ERROR, 0);
|
||||||
}
|
}
|
||||||
if (shut_rx) {
|
if (shut_rx) {
|
||||||
|
Loading…
Reference in New Issue
Block a user