pktque.Buf: bugfix: release pkt.Data
This commit is contained in:
parent
3937f7e984
commit
46d5df0985
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
package pktque
|
package pktque
|
||||||
|
|
||||||
import (
|
import (
|
||||||
@ -6,15 +5,16 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type Buf struct {
|
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 {
|
||||||
return &Buf{
|
return &Buf{
|
||||||
pkts: make([]av.Packet, 64),
|
pkts: make([]av.Packet, 64),
|
||||||
maxsize: 1024*512,
|
maxsize: 1024 * 512,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -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()
|
||||||
}
|
}
|
||||||
@ -60,14 +64,13 @@ func (self *Buf) IsValidPos(pos BufPos) bool {
|
|||||||
type BufPos int
|
type BufPos int
|
||||||
|
|
||||||
func (self BufPos) LT(pos BufPos) bool {
|
func (self BufPos) LT(pos BufPos) bool {
|
||||||
return self - pos < 0
|
return self-pos < 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self BufPos) GE(pos BufPos) bool {
|
func (self BufPos) GE(pos BufPos) bool {
|
||||||
return self - pos >= 0
|
return self-pos >= 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self BufPos) GT(pos BufPos) bool {
|
func (self BufPos) GT(pos BufPos) bool {
|
||||||
return self - pos > 0
|
return self-pos > 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user