diff --git a/fec.go b/fec.go index db9a199..ff81a7e 100644 --- a/fec.go +++ b/fec.go @@ -209,6 +209,13 @@ func (dec *fecDecoder) freeRange(first, n int, q []fecElement) []fecElement { return q[:len(q)-n] } +// release all segments back to xmitBuf +func (dec *fecDecoder) release() { + if n := len(dec.rx); n > 0 { + dec.rx = dec.freeRange(0, n, dec.rx) + } +} + type ( // fecEncoder for encoding outgoing packets fecEncoder struct { diff --git a/sess.go b/sess.go index c9ffa4b..07a5e60 100644 --- a/sess.go +++ b/sess.go @@ -360,6 +360,9 @@ func (s *UDPSession) Close() error { s.uncork() // release pending segments s.kcp.ReleaseTX() + if s.fecDecoder != nil { + s.fecDecoder.release() + } s.mu.Unlock() if s.l != nil { // belongs to listener