From 1f6cfb8afc63107507c3eb01c5881b35c01f544c Mon Sep 17 00:00:00 2001 From: fangdingjun Date: Wed, 25 Jul 2018 14:27:39 +0800 Subject: [PATCH] use Pool to manage buffer --- tls.go | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/tls.go b/tls.go index be091d1..a6cfc6e 100644 --- a/tls.go +++ b/tls.go @@ -374,14 +374,28 @@ func (c *Conn) getServerName() string { return name } +var bufPool = &sync.Pool{ + New: func() interface{} { + return make([]byte, 16*1024) + }, +} + // onDataReadCallback callback function for gnutls library want to read data from network // //export onDataReadCallback func onDataReadCallback(d unsafe.Pointer, cbuf *C.char, bufLen C.int) C.int { //log.Println("read addr ", uintptr(d)) conn := (*Conn)(unsafe.Pointer((uintptr(d)))) - buf := make([]byte, int(bufLen)) - n, err := conn.c.Read(buf) + + //buf := make([]byte, int(bufLen)) + _length := int(bufLen) + buf := bufPool.Get().([]byte) + if len(buf) < _length { + buf = make([]byte, _length) + } + defer bufPool.Put(buf) + + n, err := conn.c.Read(buf[:_length]) if err != nil { //log.Println(err) // 0 indicates connection termination