package smux import ( "sync" "github.com/pkg/errors" ) var defaultAllocator *Allocator func init() { defaultAllocator = NewAllocator() } // allocator for incoming frames // to prevent write after zeroing type Allocator struct { buffers []sync.Pool } func NewAllocator() *Allocator { alloc := new(Allocator) alloc.buffers = make([]sync.Pool, 17) // 1B -> 64K for k := range alloc.buffers { i := k alloc.buffers[k].New = func() interface{} { return make([]byte, 1< 65536 { return nil } bits := msb(size) if size == 1< 65536 || cap(buf) != 1<>= 1 if size == 0 { return pos } pos++ } }