Skip to content

Commit 2ed35ac

Browse files
committed
fix race and parityshard leaks
1 parent 68589db commit 2ed35ac

File tree

2 files changed

+3
-2
lines changed

2 files changed

+3
-2
lines changed

fec.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ func (dec *fecDecoder) decode(in fecPacket) (recovered [][]byte) {
156156
dlen := len(shards[k])
157157
shards[k] = shards[k][:maxlen]
158158
copy(shards[k][dlen:], dec.zeros)
159-
} else {
159+
} else if k < dec.dataShards {
160160
shards[k] = xmitBuf.Get().([]byte)[:0]
161161
}
162162
}

sess.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -663,9 +663,10 @@ func (s *UDPSession) kcpInput(data []byte) {
663663
if f.flag() == typeParity {
664664
fecParityShards++
665665
}
666-
recovers := s.fecDecoder.decode(f)
667666

667+
// lock
668668
s.mu.Lock()
669+
recovers := s.fecDecoder.decode(f)
669670
if f.flag() == typeData {
670671
if ret := s.kcp.Input(data[fecHeaderSizePlus2:], true, s.ackNoDelay); ret != 0 {
671672
kcpInErrors++

0 commit comments

Comments
 (0)