Do not post MG_SIG_CLOSE_CONN if the conn is already closing

This commit is contained in:
Deomid Ryabkov 2022-10-09 16:36:51 +01:00
parent 44b15b76f7
commit afcb4d9df7
2 changed files with 8 additions and 4 deletions

View File

@ -15129,8 +15129,10 @@ static err_t mg_lwip_tcp_sent_cb(void *arg, struct tcp_pcb *tpcb,
struct mg_connection *nc = (struct mg_connection *) arg; struct mg_connection *nc = (struct mg_connection *) arg;
DBG(("%p %p %u %p %p", nc, tpcb, num_sent, tpcb->unsent, tpcb->unacked)); DBG(("%p %p %u %p %p", nc, tpcb, num_sent, tpcb->unsent, tpcb->unacked));
if (nc == NULL) return ERR_OK; if (nc == NULL) return ERR_OK;
if ((nc->flags & MG_F_SEND_AND_CLOSE) && !(nc->flags & MG_F_WANT_WRITE) && if ((nc->flags & (MG_F_SEND_AND_CLOSE | MG_F_CLOSE_IMMEDIATELY)) ==
nc->send_mbuf.len == 0 && tpcb->unsent == NULL && tpcb->unacked == NULL) { MG_F_SEND_AND_CLOSE &&
!(nc->flags & MG_F_WANT_WRITE) && nc->send_mbuf.len == 0 &&
tpcb->unsent == NULL && tpcb->unacked == NULL) {
mg_lwip_post_signal(MG_SIG_CLOSE_CONN, nc); mg_lwip_post_signal(MG_SIG_CLOSE_CONN, nc);
} }
if (nc->send_mbuf.len > 0 || (nc->flags & MG_F_WANT_WRITE)) { if (nc->send_mbuf.len > 0 || (nc->flags & MG_F_WANT_WRITE)) {

View File

@ -203,8 +203,10 @@ static err_t mg_lwip_tcp_sent_cb(void *arg, struct tcp_pcb *tpcb,
struct mg_connection *nc = (struct mg_connection *) arg; struct mg_connection *nc = (struct mg_connection *) arg;
DBG(("%p %p %u %p %p", nc, tpcb, num_sent, tpcb->unsent, tpcb->unacked)); DBG(("%p %p %u %p %p", nc, tpcb, num_sent, tpcb->unsent, tpcb->unacked));
if (nc == NULL) return ERR_OK; if (nc == NULL) return ERR_OK;
if ((nc->flags & MG_F_SEND_AND_CLOSE) && !(nc->flags & MG_F_WANT_WRITE) && if ((nc->flags & (MG_F_SEND_AND_CLOSE | MG_F_CLOSE_IMMEDIATELY)) ==
nc->send_mbuf.len == 0 && tpcb->unsent == NULL && tpcb->unacked == NULL) { MG_F_SEND_AND_CLOSE &&
!(nc->flags & MG_F_WANT_WRITE) && nc->send_mbuf.len == 0 &&
tpcb->unsent == NULL && tpcb->unacked == NULL) {
mg_lwip_post_signal(MG_SIG_CLOSE_CONN, nc); mg_lwip_post_signal(MG_SIG_CLOSE_CONN, nc);
} }
if (nc->send_mbuf.len > 0 || (nc->flags & MG_F_WANT_WRITE)) { if (nc->send_mbuf.len > 0 || (nc->flags & MG_F_WANT_WRITE)) {