|
|
@@ -206,6 +206,9 @@ func (this *SendingQueue) Pop() *alloc.Buffer {
|
|
|
if this.start == this.cap {
|
|
|
this.start = 0
|
|
|
}
|
|
|
+ if this.IsEmpty() {
|
|
|
+ this.start = 0
|
|
|
+ }
|
|
|
return seg
|
|
|
}
|
|
|
|
|
|
@@ -301,6 +304,18 @@ func (this *SendingWorker) ProcessSegment(current uint32, seg *AckSegment) {
|
|
|
this.remoteNextNumber = seg.ReceivingWindow
|
|
|
}
|
|
|
this.ProcessReceivingNextWithoutLock(seg.ReceivingNext)
|
|
|
+
|
|
|
+ for !this.queue.IsEmpty() && !this.window.IsFull() {
|
|
|
+ seg := NewDataSegment()
|
|
|
+ seg.Data = this.queue.Pop()
|
|
|
+ seg.Number = this.nextNumber
|
|
|
+ seg.timeout = current
|
|
|
+ seg.ackSkipped = 0
|
|
|
+ seg.transmit = 0
|
|
|
+ this.window.Push(seg)
|
|
|
+ this.nextNumber++
|
|
|
+ }
|
|
|
+
|
|
|
var maxack uint32
|
|
|
for i := 0; i < int(seg.Count); i++ {
|
|
|
timestamp := seg.TimestampList[i]
|