浏览代码

fix buffer recycling

Darien Raymond 7 年之前
父节点
当前提交
000e0804e8
共有 2 个文件被更改,包括 11 次插入7 次删除
  1. 3 2
      common/buf/buffer_pool.go
  2. 8 5
      common/crypto/auth_test.go

+ 3 - 2
common/buf/buffer_pool.go

@@ -21,14 +21,14 @@ const (
 )
 )
 
 
 var (
 var (
-	pool     [numPools]*sync.Pool
+	pool     [numPools]sync.Pool
 	poolSize [numPools]uint32
 	poolSize [numPools]uint32
 )
 )
 
 
 func init() {
 func init() {
 	size := uint32(Size)
 	size := uint32(Size)
 	for i := 0; i < numPools; i++ {
 	for i := 0; i < numPools; i++ {
-		pool[i] = &sync.Pool{
+		pool[i] = sync.Pool{
 			New: createAllocFunc(size),
 			New: createAllocFunc(size),
 		}
 		}
 		poolSize[i] = size
 		poolSize[i] = size
@@ -52,6 +52,7 @@ func freeBytes(b []byte) {
 		ps := poolSize[i]
 		ps := poolSize[i]
 		if size >= ps {
 		if size >= ps {
 			pool[i].Put(b)
 			pool[i].Put(b)
+			return
 		}
 		}
 	}
 	}
 }
 }

+ 8 - 5
common/crypto/auth_test.go

@@ -24,11 +24,13 @@ func TestAuthenticationReaderWriter(t *testing.T) {
 	aead, err := cipher.NewGCM(block)
 	aead, err := cipher.NewGCM(block)
 	assert(err, IsNil)
 	assert(err, IsNil)
 
 
-	rawPayload := make([]byte, 8192*10)
+	const payloadSize = 1024 * 80
+	rawPayload := make([]byte, payloadSize)
 	rand.Read(rawPayload)
 	rand.Read(rawPayload)
 
 
-	payload := buf.NewSize(8192 * 10)
+	payload := buf.NewSize(payloadSize)
 	payload.Append(rawPayload)
 	payload.Append(rawPayload)
+	assert(payload.Len(), Equals, payloadSize)
 
 
 	cache := buf.NewSize(160 * 1024)
 	cache := buf.NewSize(160 * 1024)
 	iv := make([]byte, 12)
 	iv := make([]byte, 12)
@@ -45,7 +47,6 @@ func TestAuthenticationReaderWriter(t *testing.T) {
 	assert(writer.WriteMultiBuffer(buf.NewMultiBufferValue(payload)), IsNil)
 	assert(writer.WriteMultiBuffer(buf.NewMultiBufferValue(payload)), IsNil)
 	assert(cache.Len(), Equals, 82658)
 	assert(cache.Len(), Equals, 82658)
 	assert(writer.WriteMultiBuffer(buf.MultiBuffer{}), IsNil)
 	assert(writer.WriteMultiBuffer(buf.MultiBuffer{}), IsNil)
-	assert(err, IsNil)
 
 
 	reader := NewAuthenticationReader(&AEADAuthenticator{
 	reader := NewAuthenticationReader(&AEADAuthenticator{
 		AEAD: aead,
 		AEAD: aead,
@@ -57,14 +58,16 @@ func TestAuthenticationReaderWriter(t *testing.T) {
 
 
 	var mb buf.MultiBuffer
 	var mb buf.MultiBuffer
 
 
-	for mb.Len() < len(rawPayload) {
+	for mb.Len() < payloadSize {
 		mb2, err := reader.ReadMultiBuffer()
 		mb2, err := reader.ReadMultiBuffer()
 		assert(err, IsNil)
 		assert(err, IsNil)
 
 
 		mb.AppendMulti(mb2)
 		mb.AppendMulti(mb2)
 	}
 	}
 
 
-	mbContent := make([]byte, 8192*10)
+	assert(mb.Len(), Equals, payloadSize)
+
+	mbContent := make([]byte, payloadSize)
 	mb.Read(mbContent)
 	mb.Read(mbContent)
 	assert(mbContent, Equals, rawPayload)
 	assert(mbContent, Equals, rawPayload)