Memory optimizations for direct mode

This commit is contained in:
9seconds
2020-03-20 15:54:30 +03:00
parent 1a619e3090
commit 4ebae693e0
+13 -2
View File
@@ -13,6 +13,15 @@ import (
const directPipeBufferSize = 1024 * 1024
var (
directPipePool = sync.Pool{
New: func() interface{} {
rv := make([]byte, directPipeBufferSize)
return &rv
},
}
)
func directConnection(request *protocol.TelegramRequest) error {
telegramConnRaw, err := obfuscated2.TelegramProtocol(request)
if err != nil {
@@ -42,8 +51,10 @@ func directPipe(dst io.WriteCloser, src io.ReadCloser, wg *sync.WaitGroup, logge
wg.Done()
}()
buf := make([]byte, directPipeBufferSize)
if _, err := io.CopyBuffer(dst, src, buf); err != nil {
buf := directPipePool.Get().(*[]byte)
defer directPipePool.Put(buf)
if _, err := io.CopyBuffer(dst, src, *buf); err != nil {
logger.Debugw("Cannot pump sockets", "error", err)
}
}