mirror of
https://github.com/lwip-tcpip/lwip.git
synced 2024-11-16 23:15:37 +00:00
Tried to fix bug #32417 ("TCP_OVERSIZE seems to have problems with (fast-)retransmission"): Reset pcb->unsent_oversize in 2 more places...
This commit is contained in:
parent
ca6fd6015c
commit
5cfef5bf48
@ -49,6 +49,9 @@ HISTORY
|
|||||||
|
|
||||||
++ Bugfixes:
|
++ Bugfixes:
|
||||||
|
|
||||||
|
2011-09-27: Simon Goldschmidt
|
||||||
|
* tcp_in.c, tcp_out.c: Reset pcb->unsent_oversize in 2 more places...
|
||||||
|
|
||||||
2011-09-27: Simon Goldschmidt
|
2011-09-27: Simon Goldschmidt
|
||||||
* tcp_in.c: fixed bug #28288: Data after FIN in oos queue
|
* tcp_in.c: fixed bug #28288: Data after FIN in oos queue
|
||||||
|
|
||||||
|
@ -1078,6 +1078,11 @@ tcp_receive(struct tcp_pcb *pcb)
|
|||||||
|
|
||||||
next = pcb->unsent;
|
next = pcb->unsent;
|
||||||
pcb->unsent = pcb->unsent->next;
|
pcb->unsent = pcb->unsent->next;
|
||||||
|
#if TCP_OVERSIZE
|
||||||
|
if (pcb->unsent == NULL) {
|
||||||
|
pcb->unsent_oversize = 0;
|
||||||
|
}
|
||||||
|
#endif /* TCP_OVERSIZE */
|
||||||
LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_receive: queuelen %"U16_F" ... ", (u16_t)pcb->snd_queuelen));
|
LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_receive: queuelen %"U16_F" ... ", (u16_t)pcb->snd_queuelen));
|
||||||
LWIP_ASSERT("pcb->snd_queuelen >= pbuf_clen(next->p)", (pcb->snd_queuelen >= pbuf_clen(next->p)));
|
LWIP_ASSERT("pcb->snd_queuelen >= pbuf_clen(next->p)", (pcb->snd_queuelen >= pbuf_clen(next->p)));
|
||||||
/* Prevent ACK for FIN to generate a sent event */
|
/* Prevent ACK for FIN to generate a sent event */
|
||||||
|
@ -1250,6 +1250,7 @@ tcp_rexmit_rto(struct tcp_pcb *pcb)
|
|||||||
pcb->unsent = pcb->unacked;
|
pcb->unsent = pcb->unacked;
|
||||||
/* unacked queue is now empty */
|
/* unacked queue is now empty */
|
||||||
pcb->unacked = NULL;
|
pcb->unacked = NULL;
|
||||||
|
/* last unsent hasn't changed, no need to reset unsent_oversize */
|
||||||
|
|
||||||
/* increment number of retransmissions */
|
/* increment number of retransmissions */
|
||||||
++pcb->nrtx;
|
++pcb->nrtx;
|
||||||
@ -1290,6 +1291,12 @@ tcp_rexmit(struct tcp_pcb *pcb)
|
|||||||
}
|
}
|
||||||
seg->next = *cur_seg;
|
seg->next = *cur_seg;
|
||||||
*cur_seg = seg;
|
*cur_seg = seg;
|
||||||
|
#if TCP_OVERSIZE
|
||||||
|
if (seg->next == NULL) {
|
||||||
|
/* the retransmitted segment is last in unsent, so reset unsent_oversize */
|
||||||
|
pcb->unsent_oversize = 0;
|
||||||
|
}
|
||||||
|
#endif /* TCP_OVERSIZE */
|
||||||
|
|
||||||
++pcb->nrtx;
|
++pcb->nrtx;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user