Skip to content

Commit d0f56d8

Browse files
committed
adjust flush condition sequence,fastack first to prevent needless fire
1 parent b82e376 commit d0f56d8

File tree

1 file changed

+12
-12
lines changed

1 file changed

+12
-12
lines changed

kcp.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -788,30 +788,30 @@ func (kcp *KCP) flush(ackOnly bool) uint32 {
788788
needsend = true
789789
segment.rto = kcp.rx_rto
790790
segment.resendts = current + segment.rto
791-
} else if _itimediff(current, segment.resendts) >= 0 { // RTO
792-
needsend = true
793-
if kcp.nodelay == 0 {
794-
segment.rto += kcp.rx_rto
795-
} else {
796-
segment.rto += kcp.rx_rto / 2
797-
}
798-
segment.resendts = current + segment.rto
799-
lost++
800-
lostSegs++
801-
} else if segment.fastack >= resent && _itimediff(current, segment.ts) >= int32(kcp.rx_rto) { // fast retransmit
791+
} else if segment.fastack >= resent { // fast retransmit
802792
needsend = true
803793
segment.fastack = 0
804794
segment.rto = kcp.rx_rto
805795
segment.resendts = current + segment.rto
806796
change++
807797
fastRetransSegs++
808-
} else if segment.fastack > 0 && _itimediff(current, segment.ts) >= int32(kcp.rx_rto) && newSegsCount == 0 { // early retransmit
798+
} else if segment.fastack > 0 && newSegsCount == 0 { // early retransmit
809799
needsend = true
810800
segment.fastack = 0
811801
segment.rto = kcp.rx_rto
812802
segment.resendts = current + segment.rto
813803
change++
814804
earlyRetransSegs++
805+
} else if _itimediff(current, segment.resendts) >= 0 { // RTO
806+
needsend = true
807+
if kcp.nodelay == 0 {
808+
segment.rto += kcp.rx_rto
809+
} else {
810+
segment.rto += kcp.rx_rto / 2
811+
}
812+
segment.resendts = current + segment.rto
813+
lost++
814+
lostSegs++
815815
}
816816

817817
if needsend {

0 commit comments

Comments
 (0)