From 180e6d2c752c225f0761301152327564b196554b Mon Sep 17 00:00:00 2001 From: marcbou Date: Sun, 26 Aug 2007 23:58:33 +0000 Subject: [PATCH] Reset the callbacks and arg (conn) to NULL in do_close_internal(), because TCP callbacks in api_msg.c can under certain circumstances be called with an invalid conn pointer after the connection has been closed (and conn has been freed). --- src/api/api_msg.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/api/api_msg.c b/src/api/api_msg.c index 8c9c24b0..27ae91f3 100644 --- a/src/api/api_msg.c +++ b/src/api/api_msg.c @@ -452,6 +452,12 @@ do_close_internal(struct netconn *conn) if (err == ERR_OK) { /* Closing succeeded */ conn->state = NETCONN_NONE; + /* Set back some callback pointers as conn is going away */ + tcp_err(conn->pcb.tcp, NULL); + tcp_poll(conn->pcb.tcp, NULL, 4); + tcp_sent(conn->pcb.tcp, NULL); + tcp_recv(conn->pcb.tcp, NULL); + tcp_arg(conn->pcb.tcp, NULL); conn->pcb.tcp = NULL; conn->err = err; /* Trigger select() in socket layer */