pktque.Buf: bugfix: release pkt.Data

This commit is contained in:
nareix 2016-08-26 12:06:05 +08:00
parent 3937f7e984
commit 46d5df0985

View File

@ -1,4 +1,3 @@
package pktque package pktque
import ( import (
@ -9,6 +8,7 @@ type Buf struct {
Head, Tail BufPos Head, Tail BufPos
pkts []av.Packet pkts []av.Packet
size, maxsize int size, maxsize int
count int
} }
func NewBuf() *Buf { func NewBuf() *Buf {
@ -24,10 +24,13 @@ func (self *Buf) SetMaxSize(size int) {
} }
func (self *Buf) shrink() { func (self *Buf) shrink() {
for self.size > self.maxsize && self.Head-self.Tail > 1 { for self.size > self.maxsize && self.count > 1 {
pkt := self.pkts[int(self.Head)&(len(self.pkts)-1)] i := int(self.Head) & (len(self.pkts) - 1)
pkt := self.pkts[i]
self.pkts[i] = av.Packet{}
self.size -= len(pkt.Data) self.size -= len(pkt.Data)
self.Head++ self.Head++
self.count--
} }
} }
@ -40,11 +43,12 @@ func (self *Buf) grow() {
} }
func (self *Buf) Push(pkt av.Packet) { func (self *Buf) Push(pkt av.Packet) {
if int(self.Tail-self.Head) == len(self.pkts) { if self.count == len(self.pkts) {
self.grow() self.grow()
} }
self.pkts[int(self.Tail)&(len(self.pkts)-1)] = pkt self.pkts[int(self.Tail)&(len(self.pkts)-1)] = pkt
self.Tail++ self.Tail++
self.count++
self.size += len(pkt.Data) self.size += len(pkt.Data)
self.shrink() self.shrink()
} }
@ -70,4 +74,3 @@ func (self BufPos) GE(pos BufPos) bool {
func (self BufPos) GT(pos BufPos) bool { func (self BufPos) GT(pos BufPos) bool {
return self-pos > 0 return self-pos > 0
} }