Fixed a bug in linger-closing when LWIP_TCPIP_CORE_LOCKING==1

This commit is contained in:
sg 2015-02-11 22:53:19 +01:00
parent 7d8657287e
commit 276e35ecfb

View File

@ -861,6 +861,7 @@ lwip_netconn_do_close_internal(struct netconn *conn)
if (linger_wait_required) { if (linger_wait_required) {
/* wait for ACK of all unsent/unacked data by just getting called again */ /* wait for ACK of all unsent/unacked data by just getting called again */
close_finished = 0; close_finished = 0;
err = ERR_INPROGRESS;
} }
#endif /* LWIP_SO_LINGER */ #endif /* LWIP_SO_LINGER */
} else { } else {
@ -944,6 +945,7 @@ lwip_netconn_do_close_internal(struct netconn *conn)
} }
/* If closing didn't succeed, we get called again either /* If closing didn't succeed, we get called again either
from poll_tcp or from sent_tcp */ from poll_tcp or from sent_tcp */
LWIP_ASSERT("err != ERR_OK", err != ERR_OK);
return err; return err;
} }
#endif /* LWIP_TCP */ #endif /* LWIP_TCP */
@ -978,10 +980,10 @@ lwip_netconn_do_delconn(struct api_msg_msg *msg)
} }
} }
#else /* LWIP_NETCONN_FULLDUPLEX */ #else /* LWIP_NETCONN_FULLDUPLEX */
if (((msg->conn->state != NETCONN_NONE) && if (((msg->conn->state != NETCONN_NONE) &&
(msg->conn->state != NETCONN_LISTEN) && (msg->conn->state != NETCONN_LISTEN) &&
(msg->conn->state != NETCONN_CONNECT)) || (msg->conn->state != NETCONN_CONNECT)) ||
(msg->conn->state == NETCONN_CONNECT) && !IN_NONBLOCKING_CONNECT(msg->conn)) { (msg->conn->state == NETCONN_CONNECT) && !IN_NONBLOCKING_CONNECT(msg->conn)) {
/* This means either a blocking write or blocking connect is running /* This means either a blocking write or blocking connect is running
(nonblocking write returns and sets state to NONE) */ (nonblocking write returns and sets state to NONE) */
msg->err = ERR_INPROGRESS; msg->err = ERR_INPROGRESS;