diff options
author | Rob Pike <r@golang.org> | 2010-09-16 13:59:31 +1000 |
---|---|---|
committer | Rob Pike <r@golang.org> | 2010-09-16 13:59:31 +1000 |
commit | e5eb1b48c6658c0740e031556ff1b0630161e873 (patch) | |
tree | dd6582deb37276bad0df35b02ae951885fecf37b | |
parent | bf6e8fd33032d8f6efb1efc7766180b90a83b00d (diff) | |
download | go-e5eb1b48c6658c0740e031556ff1b0630161e873.tar.gz |
netchan: fix bug for imported send.
Also add a bit of debugging and sanitation code.
Fixes issue 769.
R=adg
CC=golang-dev
http://codereview.appspot.com/2206042
-rw-r--r-- | src/pkg/netchan/common.go | 10 | ||||
-rw-r--r-- | src/pkg/netchan/export.go | 3 | ||||
-rw-r--r-- | src/pkg/netchan/import.go | 3 |
3 files changed, 14 insertions, 2 deletions
diff --git a/src/pkg/netchan/common.go b/src/pkg/netchan/common.go index 010b957ac..3f9986849 100644 --- a/src/pkg/netchan/common.go +++ b/src/pkg/netchan/common.go @@ -21,6 +21,16 @@ const ( Send ) +func (dir Dir) String() string { + switch dir { + case Recv: + return "Recv" + case Send: + return "Send" + } + return "???" +} + // Payload types const ( payRequest = iota // request structure follows diff --git a/src/pkg/netchan/export.go b/src/pkg/netchan/export.go index c42e35c56..a58797e63 100644 --- a/src/pkg/netchan/export.go +++ b/src/pkg/netchan/export.go @@ -19,7 +19,7 @@ */ package netchan -// BUG: can't use range clause to receive when using ImportNValues with N non-zero. +// BUG: can't use range clause to receive when using ImportNValues to limit the count. import ( "log" @@ -94,6 +94,7 @@ func (client *expClient) run() { reqValue := reflect.NewValue(req) error := new(error) for { + *hdr = header{} if err := client.decode(hdrValue); err != nil { log.Stderr("error decoding client header:", err) break diff --git a/src/pkg/netchan/import.go b/src/pkg/netchan/import.go index 77ec24d77..028a25f7f 100644 --- a/src/pkg/netchan/import.go +++ b/src/pkg/netchan/import.go @@ -64,6 +64,7 @@ func (imp *Importer) run() { err := new(error) errValue := reflect.NewValue(err) for { + *hdr = header{} if e := imp.decode(hdrValue); e != nil { log.Stderr("importer header:", e) imp.shutdown() @@ -152,7 +153,7 @@ func (imp *Importer) ImportNValues(name string, chT interface{}, dir Dir, n int) } if dir == Send { go func() { - for i := 0; n == 0 || i < n; i++ { + for i := 0; n == -1 || i < n; i++ { val := ch.Recv() if err := imp.encode(hdr, payData, val.Interface()); err != nil { log.Stderr("error encoding client response:", err) |