aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Pike <r@golang.org>2009-11-16 23:32:16 -0800
committerRob Pike <r@golang.org>2009-11-16 23:32:16 -0800
commit50c04132ac43123b968b6057f49d4c387f922ed3 (patch)
treeb528f59d87e2a01dbe683c257ef1c853c39afae4
parentbcb46c8560ce11a6bc6d47fd3b2dae623c66b1da (diff)
downloadgo-50c04132ac43123b968b6057f49d4c387f922ed3.tar.gz
go-50c04132ac43123b968b6057f49d4c387f922ed3.zip
fix bug causing empty strings to be become non-nil errors on client side of rpc connection.
R=rsc CC=golang-dev https://golang.org/cl/155078
-rw-r--r--src/pkg/rpc/client.go7
-rw-r--r--src/pkg/rpc/server.go4
2 files changed, 9 insertions, 2 deletions
diff --git a/src/pkg/rpc/client.go b/src/pkg/rpc/client.go
index 93884d9a71..8ee4c7419b 100644
--- a/src/pkg/rpc/client.go
+++ b/src/pkg/rpc/client.go
@@ -83,7 +83,12 @@ func (client *Client) input() {
client.pending[seq] = c, false;
client.mutex.Unlock();
err = client.dec.Decode(c.Reply);
- c.Error = os.ErrorString(response.Error);
+ // Empty strings should turn into nil os.Errors
+ if response.Error != "" {
+ c.Error = os.ErrorString(response.Error)
+ } else {
+ c.Error = nil
+ }
// We don't want to block here. It is the caller's responsibility to make
// sure the channel has enough buffer space. See comment in Go().
_ = c.Done <- c; // do not block
diff --git a/src/pkg/rpc/server.go b/src/pkg/rpc/server.go
index 045e2bb4ee..cf32eed8df 100644
--- a/src/pkg/rpc/server.go
+++ b/src/pkg/rpc/server.go
@@ -276,7 +276,9 @@ func sendResponse(sending *sync.Mutex, req *Request, reply interface{}, enc *gob
resp := new(Response);
// Encode the response header
resp.ServiceMethod = req.ServiceMethod;
- resp.Error = errmsg;
+ if errmsg != "" {
+ resp.Error = errmsg
+ }
resp.Seq = req.Seq;
sending.Lock();
enc.Encode(resp);