Browse Source

avoid heap allocation for buffer variables

Darien Raymond 7 years ago
parent
commit
db5259e75b
1 changed files with 6 additions and 3 deletions
  1. 6 3
      common/buf/buffer.go

+ 6 - 3
common/buf/buffer.go

@@ -25,9 +25,11 @@ func (b *Buffer) Release() {
 	if b == nil || b.v == nil {
 	if b == nil || b.v == nil {
 		return
 		return
 	}
 	}
-	pool.Put(b.v)
+
+	p := b.v
 	b.v = nil
 	b.v = nil
 	b.Clear()
 	b.Clear()
+	pool.Put(p)
 }
 }
 
 
 // Clear clears the content of the buffer, results an empty buffer with
 // Clear clears the content of the buffer, results an empty buffer with
@@ -57,7 +59,7 @@ func (b *Buffer) Bytes() []byte {
 func (b *Buffer) Extend(n int32) []byte {
 func (b *Buffer) Extend(n int32) []byte {
 	end := b.end + n
 	end := b.end + n
 	if end > int32(len(b.v)) {
 	if end > int32(len(b.v)) {
-		panic(newError("out of bound: ", end))
+		panic("extending out of bound")
 	}
 	}
 	ext := b.v[b.end:end]
 	ext := b.v[b.end:end]
 	b.end = end
 	b.end = end
@@ -179,7 +181,8 @@ func (b *Buffer) ReadFrom(reader io.Reader) (int64, error) {
 func (b *Buffer) ReadFullFrom(reader io.Reader, size int32) (int64, error) {
 func (b *Buffer) ReadFullFrom(reader io.Reader, size int32) (int64, error) {
 	end := b.end + size
 	end := b.end + size
 	if end > int32(len(b.v)) {
 	if end > int32(len(b.v)) {
-		return 0, newError("out of bound: ", end)
+		v := end
+		return 0, newError("out of bound: ", v)
 	}
 	}
 	n, err := io.ReadFull(reader, b.v[b.end:end])
 	n, err := io.ReadFull(reader, b.v[b.end:end])
 	b.end += int32(n)
 	b.end += int32(n)