aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Pike <r@golang.org>2010-09-16 13:59:31 +1000
committerRob Pike <r@golang.org>2010-09-16 13:59:31 +1000
commit381ab58e2c1c3e10e64faeca292ee1a5b3fb0226 (patch)
treee9648d19e0b67ac805498c159419d1f096b5e02a
parent5667d8259980472f787b015079940d22ff54b2cd (diff)
downloadgo-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.go10
-rw-r--r--src/pkg/netchan/export.go3
-rw-r--r--src/pkg/netchan/import.go3
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)