34 lines
572 B
Go
34 lines
572 B
Go
|
package wire
|
||
|
|
||
|
import (
|
||
|
"sync"
|
||
|
|
||
|
"github.com/lucas-clemente/quic-go/internal/protocol"
|
||
|
)
|
||
|
|
||
|
var pool sync.Pool
|
||
|
|
||
|
func init() {
|
||
|
pool.New = func() interface{} {
|
||
|
return &StreamFrame{
|
||
|
Data: make([]byte, 0, protocol.MaxPacketBufferSize),
|
||
|
fromPool: true,
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func GetStreamFrame() *StreamFrame {
|
||
|
f := pool.Get().(*StreamFrame)
|
||
|
return f
|
||
|
}
|
||
|
|
||
|
func putStreamFrame(f *StreamFrame) {
|
||
|
if !f.fromPool {
|
||
|
return
|
||
|
}
|
||
|
if protocol.ByteCount(cap(f.Data)) != protocol.MaxPacketBufferSize {
|
||
|
panic("wire.PutStreamFrame called with packet of wrong size!")
|
||
|
}
|
||
|
pool.Put(f)
|
||
|
}
|