From 46d5df09854348c932208b3292ed5ddb7f7ae6ee Mon Sep 17 00:00:00 2001 From: nareix Date: Fri, 26 Aug 2016 12:06:05 +0800 Subject: [PATCH] pktque.Buf: bugfix: release pkt.Data --- av/pktque/buf.go | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/av/pktque/buf.go b/av/pktque/buf.go index 8be5f9a8..70b890fe 100644 --- a/av/pktque/buf.go +++ b/av/pktque/buf.go @@ -1,4 +1,3 @@ - package pktque import ( @@ -6,15 +5,16 @@ import ( ) type Buf struct { - Head, Tail BufPos - pkts []av.Packet + Head, Tail BufPos + pkts []av.Packet size, maxsize int + count int } func NewBuf() *Buf { return &Buf{ - pkts: make([]av.Packet, 64), - maxsize: 1024*512, + pkts: make([]av.Packet, 64), + maxsize: 1024 * 512, } } @@ -24,10 +24,13 @@ func (self *Buf) SetMaxSize(size int) { } func (self *Buf) shrink() { - for self.size > self.maxsize && self.Head-self.Tail > 1 { - pkt := self.pkts[int(self.Head)&(len(self.pkts)-1)] + for self.size > self.maxsize && self.count > 1 { + i := int(self.Head) & (len(self.pkts) - 1) + pkt := self.pkts[i] + self.pkts[i] = av.Packet{} self.size -= len(pkt.Data) self.Head++ + self.count-- } } @@ -40,11 +43,12 @@ func (self *Buf) grow() { } 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.pkts[int(self.Tail)&(len(self.pkts)-1)] = pkt self.Tail++ + self.count++ self.size += len(pkt.Data) self.shrink() } @@ -60,14 +64,13 @@ func (self *Buf) IsValidPos(pos BufPos) bool { type BufPos int func (self BufPos) LT(pos BufPos) bool { - return self - pos < 0 + return self-pos < 0 } func (self BufPos) GE(pos BufPos) bool { - return self - pos >= 0 + return self-pos >= 0 } func (self BufPos) GT(pos BufPos) bool { - return self - pos > 0 + return self-pos > 0 } -