refine seg allocation

pull/215/head
v2ray 9 years ago
parent 6efff7654c
commit 16d1b42f59
No known key found for this signature in database
GPG Key ID: 7251FFA14BB18169

@ -215,6 +215,7 @@ func (kcp *KCP) flush() {
kcp.output.Write(seg) kcp.output.Write(seg)
kcp.lastPingTime = kcp.current kcp.lastPingTime = kcp.current
kcp.sendingUpdated = false kcp.sendingUpdated = false
seg.Release()
} }
// flash remain segments // flash remain segments

@ -39,7 +39,7 @@ func (this *BufferedSegmentWriter) Write(seg Segment) {
this.buffer = alloc.NewSmallBuffer().Clear() this.buffer = alloc.NewSmallBuffer().Clear()
} }
this.buffer.Append(seg.Bytes(nil)) this.buffer.Value = seg.Bytes(this.buffer.Value)
} }
func (this *BufferedSegmentWriter) FlushWithoutLock() { func (this *BufferedSegmentWriter) FlushWithoutLock() {

@ -112,6 +112,9 @@ L:
return totalBytes, errTimeout return totalBytes, errTimeout
} }
timeToSleep += 500 * time.Millisecond timeToSleep += 500 * time.Millisecond
if timeToSleep > 5*time.Second {
timeToSleep = 5 * time.Second
}
} }
} }
@ -119,9 +122,6 @@ L:
} }
func (this *ReceivingQueue) Put(payload *alloc.Buffer) bool { func (this *ReceivingQueue) Put(payload *alloc.Buffer) bool {
this.Lock()
defer this.Unlock()
if this.closed { if this.closed {
payload.Release() payload.Release()
return false return false
@ -211,6 +211,7 @@ func (this *AckList) Flush(current uint32, rto uint32) {
this.Unlock() this.Unlock()
if seg.Count > 0 { if seg.Count > 0 {
this.writer.Write(seg) this.writer.Write(seg)
seg.Release()
} }
} }
@ -268,6 +269,7 @@ func (this *ReceivingWorker) ProcessSegment(seg *DataSegment) {
} }
seg.Data = nil seg.Data = nil
seg.Release()
this.window.Advance() this.window.Advance()
this.nextNumber++ this.nextNumber++
this.updated = true this.updated = true

@ -230,9 +230,6 @@ func ReadSegment(buf []byte) (Segment, []byte) {
seg.Count = buf[0] seg.Count = buf[0]
buf = buf[1:] buf = buf[1:]
seg.NumberList = make([]uint32, 0, seg.Count)
seg.TimestampList = make([]uint32, 0, seg.Count)
if len(buf) < int(seg.Count)*8 { if len(buf) < int(seg.Count)*8 {
return nil, nil return nil, nil
} }

Loading…
Cancel
Save