From 4ebae693e02473976ebf43b07e23d710d417e56a Mon Sep 17 00:00:00 2001 From: 9seconds Date: Fri, 20 Mar 2020 15:54:30 +0300 Subject: [PATCH] Memory optimizations for direct mode --- proxy/direct.go | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/proxy/direct.go b/proxy/direct.go index 7067cbb..bbdd7bc 100644 --- a/proxy/direct.go +++ b/proxy/direct.go @@ -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) } }