fixed bug #34569: shutdown(SHUT_WR) crashes netconn/socket api

This commit is contained in:
Simon Goldschmidt 2011-10-17 19:38:47 +02:00
parent 0333e81616
commit e039d4103f
2 changed files with 9 additions and 6 deletions

View File

@ -69,6 +69,9 @@ HISTORY
++ Bugfixes:
2011-10-17: Simon Goldschmidt
* api_msg.c: fixed bug #34569: shutdown(SHUT_WR) crashes netconn/socket api
2011-10-13: Simon Goldschmidt
* 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

View File

@ -778,21 +778,21 @@ do_close_internal(struct netconn *conn)
}
}
/* Try to close the connection */
if (shut == NETCONN_SHUT_RDWR) {
if (close) {
err = tcp_close(conn->pcb.tcp);
} 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) {
/* Closing succeeded */
conn->current_msg->err = ERR_OK;
conn->current_msg = NULL;
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) {
/* 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);
}
if (shut_rx) {