FILE / ScuroNeko/mtg

mtglib/internal/relay/pools.go

Исходный файл и его история в репозитории.
FILE a3362c7ea4c7b8eec6b37dfb542c81c310ddae18
Files
mtg/mtglib/internal/relay/pools.go
T

47 lines
770 B
Go

package relay
import (
"context"
"sync"
"time"
)
var relayPool = sync.Pool{
New: func() interface{} {
return &Relay{
tickChannel: make(chan struct{}),
errorChannel: make(chan error, 1),
}
},
}
func AcquireRelay(ctx context.Context, logger Logger, bufferSize int, idleTimeout time.Duration) *Relay {
ctx, cancel := context.WithCancel(ctx)
r := relayPool.Get().(*Relay)
r.ctx = ctx
r.ctxCancel = cancel
r.logger = logger
r.tickTimeout = idleTimeout
if len(r.eastBuffer) != bufferSize {
r.eastBuffer = make([]byte, bufferSize)
}
if len(r.westBuffer) != bufferSize {
r.westBuffer = make([]byte, bufferSize)
}
return r
}
func ReleaseRelay(r *Relay) {
r.ctxCancel()
r.ctx = nil
r.ctxCancel = nil
r.logger = nil
relayPool.Put(r)
}