dont create new reader in recvMsg (#940)
This commit is contained in:
@ -21,7 +21,6 @@
|
|||||||
package transport // import "google.golang.org/grpc/transport"
|
package transport // import "google.golang.org/grpc/transport"
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"net"
|
"net"
|
||||||
@ -109,7 +108,7 @@ type recvBufferReader struct {
|
|||||||
ctx context.Context
|
ctx context.Context
|
||||||
goAway chan struct{}
|
goAway chan struct{}
|
||||||
recv *recvBuffer
|
recv *recvBuffer
|
||||||
last *bytes.Reader // Stores the remaining data in the previous calls.
|
last []byte // Stores the remaining data in the previous calls.
|
||||||
err error
|
err error
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -121,9 +120,11 @@ func (r *recvBufferReader) Read(p []byte) (n int, err error) {
|
|||||||
return 0, r.err
|
return 0, r.err
|
||||||
}
|
}
|
||||||
defer func() { r.err = err }()
|
defer func() { r.err = err }()
|
||||||
if r.last != nil && r.last.Len() > 0 {
|
if r.last != nil && len(r.last) > 0 {
|
||||||
// Read remaining data left in last call.
|
// Read remaining data left in last call.
|
||||||
return r.last.Read(p)
|
copied := copy(p, r.last)
|
||||||
|
r.last = r.last[copied:]
|
||||||
|
return copied, nil
|
||||||
}
|
}
|
||||||
select {
|
select {
|
||||||
case <-r.ctx.Done():
|
case <-r.ctx.Done():
|
||||||
@ -136,8 +137,9 @@ func (r *recvBufferReader) Read(p []byte) (n int, err error) {
|
|||||||
if m.err != nil {
|
if m.err != nil {
|
||||||
return 0, m.err
|
return 0, m.err
|
||||||
}
|
}
|
||||||
r.last = bytes.NewReader(m.data)
|
copied := copy(p, m.data)
|
||||||
return r.last.Read(p)
|
r.last = m.data[copied:]
|
||||||
|
return copied, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user