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 | 381ab58e2c1c3e10e64faeca292ee1a5b3fb0226 (patch) | |
tree | e9648d19e0b67ac805498c159419d1f096b5e02a | |
parent | 5667d8259980472f787b015079940d22ff54b2cd (diff) | |
download | go-381ab58e2c1c3e10e64faeca292ee1a5b3fb0226.tar.gz go-381ab58e2c1c3e10e64faeca292ee1a5b3fb0226.zip |
netchan: fix bug for imported send.
Also add a bit of debugging and sanitation code.
Fixes #769.
R=adg
CC=golang-dev
https://golang.org/cl/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 010b957acd..3f99868490 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 c42e35c56d..a58797e630 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 77ec24d77b..028a25f7f8 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) |