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