@ -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 )