mirror of
https://github.com/lwip-tcpip/lwip.git
synced 2025-01-30 12:32:37 +00:00
fixed bug #38468 (tcp_sent() not called on half-open connection for data ACKed with the same ack as FIN)
This commit is contained in:
parent
17486408b4
commit
c00a62d37f
@ -216,6 +216,10 @@ HISTORY
|
|||||||
|
|
||||||
++ Bugfixes:
|
++ Bugfixes:
|
||||||
|
|
||||||
|
2015-03-21: Simon Goldschmidt
|
||||||
|
* tcp_in.c: fixed bug #38468 (tcp_sent() not called on half-open connection for
|
||||||
|
data ACKed with the same ack as FIN)
|
||||||
|
|
||||||
2015-03-21: Simon Goldschmidt (patch by Christoffer Lind)
|
2015-03-21: Simon Goldschmidt (patch by Christoffer Lind)
|
||||||
* dhcp.h/.c: fixed bug #38204 (DHCP lease time not handled correctly)
|
* dhcp.h/.c: fixed bug #38204 (DHCP lease time not handled correctly)
|
||||||
|
|
||||||
|
@ -360,17 +360,6 @@ tcp_input(struct pbuf *p, struct netif *inp)
|
|||||||
TCP_EVENT_ERR(pcb->errf, pcb->callback_arg, ERR_RST);
|
TCP_EVENT_ERR(pcb->errf, pcb->callback_arg, ERR_RST);
|
||||||
tcp_pcb_remove(&tcp_active_pcbs, pcb);
|
tcp_pcb_remove(&tcp_active_pcbs, pcb);
|
||||||
memp_free(MEMP_TCP_PCB, pcb);
|
memp_free(MEMP_TCP_PCB, pcb);
|
||||||
} else if (recv_flags & TF_CLOSED) {
|
|
||||||
/* The connection has been closed and we will deallocate the
|
|
||||||
PCB. */
|
|
||||||
if (!(pcb->flags & TF_RXCLOSED)) {
|
|
||||||
/* Connection closed although the application has only shut down the
|
|
||||||
tx side: call the PCB's err callback and indicate the closure to
|
|
||||||
ensure the application doesn't continue using the PCB. */
|
|
||||||
TCP_EVENT_ERR(pcb->errf, pcb->callback_arg, ERR_CLSD);
|
|
||||||
}
|
|
||||||
tcp_pcb_remove(&tcp_active_pcbs, pcb);
|
|
||||||
memp_free(MEMP_TCP_PCB, pcb);
|
|
||||||
} else {
|
} else {
|
||||||
err = ERR_OK;
|
err = ERR_OK;
|
||||||
/* If the application has registered a "sent" function to be
|
/* If the application has registered a "sent" function to be
|
||||||
@ -395,7 +384,19 @@ tcp_input(struct pbuf *p, struct netif *inp)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (recv_flags & TF_CLOSED) {
|
||||||
|
/* The connection has been closed and we will deallocate the
|
||||||
|
PCB. */
|
||||||
|
if (!(pcb->flags & TF_RXCLOSED)) {
|
||||||
|
/* Connection closed although the application has only shut down the
|
||||||
|
tx side: call the PCB's err callback and indicate the closure to
|
||||||
|
ensure the application doesn't continue using the PCB. */
|
||||||
|
TCP_EVENT_ERR(pcb->errf, pcb->callback_arg, ERR_CLSD);
|
||||||
|
}
|
||||||
|
tcp_pcb_remove(&tcp_active_pcbs, pcb);
|
||||||
|
memp_free(MEMP_TCP_PCB, pcb);
|
||||||
|
goto aborted;
|
||||||
|
}
|
||||||
#if TCP_QUEUE_OOSEQ && LWIP_WND_SCALE
|
#if TCP_QUEUE_OOSEQ && LWIP_WND_SCALE
|
||||||
while (recv_data != NULL) {
|
while (recv_data != NULL) {
|
||||||
struct pbuf *rest = NULL;
|
struct pbuf *rest = NULL;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user