Skip to content

Commit 9b1a605

Browse files
committed
make delSegment idemopotent
1 parent 2dc62d8 commit 9b1a605

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

kcp.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -182,8 +182,11 @@ func (kcp *KCP) newSegment(size int) (seg segment) {
182182
}
183183

184184
// delSegment recycles a KCP segment
185-
func (kcp *KCP) delSegment(seg segment) {
186-
xmitBuf.Put(seg.data)
185+
func (kcp *KCP) delSegment(seg *segment) {
186+
if seg.data != nil {
187+
xmitBuf.Put(seg.data)
188+
seg.data = nil
189+
}
187190
}
188191

189192
// PeekSize checks the size of next message in the recv queue
@@ -239,7 +242,7 @@ func (kcp *KCP) Recv(buffer []byte) (n int) {
239242
buffer = buffer[len(seg.data):]
240243
n += len(seg.data)
241244
count++
242-
kcp.delSegment(*seg)
245+
kcp.delSegment(seg)
243246
if seg.frg == 0 {
244247
break
245248
}
@@ -412,7 +415,7 @@ func (kcp *KCP) parse_una(una uint32) {
412415
for k := range kcp.snd_buf {
413416
seg := &kcp.snd_buf[k]
414417
if _itimediff(una, seg.sn) > 0 {
415-
kcp.delSegment(*seg)
418+
kcp.delSegment(seg)
416419
count++
417420
} else {
418421
break

0 commit comments

Comments
 (0)