]> Cypherpunks repositories - gostls13.git/commitdiff
netchan: fix bug for imported send.
authorRob Pike <r@golang.org>
Thu, 16 Sep 2010 03:59:31 +0000 (13:59 +1000)
committerRob Pike <r@golang.org>
Thu, 16 Sep 2010 03:59:31 +0000 (13:59 +1000)
Also add a bit of debugging and sanitation code.
Fixes #769.

R=adg
CC=golang-dev
https://golang.org/cl/2206042

src/pkg/netchan/common.go
src/pkg/netchan/export.go
src/pkg/netchan/import.go

index 010b957acdf374aea04e8baa91a6cd42b8752379..3f99868490bcf284c2bfad49df7e76146d7c4444 100644 (file)
@@ -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
index c42e35c56d988dfc580d7390a85d53bffbec0f31..a58797e630c1717348e02839a3aaea48f3440f8f 100644 (file)
@@ -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
index 77ec24d77ba6f4816a26974e5e078ed18f3c8b44..028a25f7f800bef682d2a8807df0ceddf0b05052 100644 (file)
@@ -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)