mirror of
https://github.com/golang/go
synced 2024-11-24 23:07:56 -07:00
rpc: properly discard values.
R=r, rsc, r2 CC=golang-dev https://golang.org/cl/4171050
This commit is contained in:
parent
ff7d7b271f
commit
34dd450fb8
@ -53,7 +53,9 @@ type Client struct {
|
||||
// The client calls WriteRequest to write a request to the connection
|
||||
// and calls ReadResponseHeader and ReadResponseBody in pairs
|
||||
// to read responses. The client calls Close when finished with the
|
||||
// connection.
|
||||
// connection. ReadResponseBody may be called with a nil
|
||||
// argument to force the body of the response to be read and then
|
||||
// discarded.
|
||||
type ClientCodec interface {
|
||||
WriteRequest(*Request, interface{}) os.Error
|
||||
ReadResponseHeader(*Response) os.Error
|
||||
@ -89,7 +91,6 @@ func (client *Client) send(c *Call) {
|
||||
|
||||
func (client *Client) input() {
|
||||
var err os.Error
|
||||
var marker struct{}
|
||||
for err == nil {
|
||||
response := new(Response)
|
||||
err = client.codec.ReadResponseHeader(response)
|
||||
@ -115,7 +116,7 @@ func (client *Client) input() {
|
||||
// any subsequent requests will get the ReadResponseBody
|
||||
// error if there is one.
|
||||
c.Error = ServerError(response.Error)
|
||||
err = client.codec.ReadResponseBody(&marker)
|
||||
err = client.codec.ReadResponseBody(nil)
|
||||
if err != nil {
|
||||
err = os.ErrorString("reading error body: " + err.String())
|
||||
}
|
||||
|
@ -98,6 +98,9 @@ func (c *clientCodec) ReadResponseHeader(r *rpc.Response) os.Error {
|
||||
}
|
||||
|
||||
func (c *clientCodec) ReadResponseBody(x interface{}) os.Error {
|
||||
if x == nil {
|
||||
return nil
|
||||
}
|
||||
return json.Unmarshal(*c.resp.Result, x)
|
||||
}
|
||||
|
||||
|
@ -85,6 +85,9 @@ func (c *serverCodec) ReadRequestHeader(r *rpc.Request) os.Error {
|
||||
}
|
||||
|
||||
func (c *serverCodec) ReadRequestBody(x interface{}) os.Error {
|
||||
if x == nil {
|
||||
return nil
|
||||
}
|
||||
// JSON params is array value.
|
||||
// RPC params is struct.
|
||||
// Unmarshal into array containing struct for now.
|
||||
|
@ -302,7 +302,7 @@ type InvalidRequest struct {
|
||||
Marker int
|
||||
}
|
||||
|
||||
var invalidRequest = InvalidRequest{1}
|
||||
var invalidRequest = InvalidRequest{}
|
||||
|
||||
func _new(t *reflect.PtrType) *reflect.PtrValue {
|
||||
v := reflect.MakeZero(t).(*reflect.PtrValue)
|
||||
@ -399,7 +399,7 @@ func (server *Server) ServeCodec(codec ServerCodec) {
|
||||
break
|
||||
}
|
||||
// discard body
|
||||
codec.ReadRequestBody(new(interface{}))
|
||||
codec.ReadRequestBody(nil)
|
||||
|
||||
// send a response if we actually managed to read a header.
|
||||
if req != nil {
|
||||
@ -486,7 +486,8 @@ func RegisterName(name string, rcvr interface{}) os.Error {
|
||||
// The server calls ReadRequestHeader and ReadRequestBody in pairs
|
||||
// to read requests from the connection, and it calls WriteResponse to
|
||||
// write a response back. The server calls Close when finished with the
|
||||
// connection.
|
||||
// connection. ReadRequestBody may be called with a nil
|
||||
// argument to force the body of the request to be read and discarded.
|
||||
type ServerCodec interface {
|
||||
ReadRequestHeader(*Request) os.Error
|
||||
ReadRequestBody(interface{}) os.Error
|
||||
|
Loading…
Reference in New Issue
Block a user