|
|
@@ -90,8 +90,8 @@ func Encode(w io.Writer, val interface{}) error {
|
|
|
return outer.encode(val)
|
|
|
}
|
|
|
eb := encbufPool.Get().(*encbuf)
|
|
|
- eb.reset()
|
|
|
defer encbufPool.Put(eb)
|
|
|
+ eb.reset()
|
|
|
if err := eb.encode(val); err != nil {
|
|
|
return err
|
|
|
}
|
|
|
@@ -102,8 +102,8 @@ func Encode(w io.Writer, val interface{}) error {
|
|
|
// Please see the documentation of Encode for the encoding rules.
|
|
|
func EncodeToBytes(val interface{}) ([]byte, error) {
|
|
|
eb := encbufPool.Get().(*encbuf)
|
|
|
- eb.reset()
|
|
|
defer encbufPool.Put(eb)
|
|
|
+ eb.reset()
|
|
|
if err := eb.encode(val); err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
@@ -288,8 +288,13 @@ type encReader struct {
|
|
|
func (r *encReader) Read(b []byte) (n int, err error) {
|
|
|
for {
|
|
|
if r.piece = r.next(); r.piece == nil {
|
|
|
- encbufPool.Put(r.buf)
|
|
|
- r.buf = nil
|
|
|
+ // Put the encode buffer back into the pool at EOF when it
|
|
|
+ // is first encountered. Subsequent calls still return EOF
|
|
|
+ // as the error but the buffer is no longer valid.
|
|
|
+ if r.buf != nil {
|
|
|
+ encbufPool.Put(r.buf)
|
|
|
+ r.buf = nil
|
|
|
+ }
|
|
|
return n, io.EOF
|
|
|
}
|
|
|
nn := copy(b[n:], r.piece)
|