summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2009-12-15 16:59:23 -0800
committerRuss Cox <rsc@golang.org>2009-12-15 16:59:23 -0800
commit95c2d520268b58e378ddd3cb5ec4b3899a908b2f (patch)
treeeb3619506cdd45295783b391820580b7ab0f11ae
parentbe19867259d73e5c8396973bc5c011654922070e (diff)
downloadgolang-95c2d520268b58e378ddd3cb5ec4b3899a908b2f.tar.gz
runtime: return zero value in x, ok = <-c when ok == false
Fixes issue 401. R=ken2 http://codereview.appspot.com/180053
-rw-r--r--src/pkg/runtime/chan.c2
-rw-r--r--test/fixedbugs/bug234.go20
2 files changed, 22 insertions, 0 deletions
diff --git a/src/pkg/runtime/chan.c b/src/pkg/runtime/chan.c
index 633ff426e..f0202cf66 100644
--- a/src/pkg/runtime/chan.c
+++ b/src/pkg/runtime/chan.c
@@ -307,6 +307,7 @@ loop:
if(pres != nil) {
unlock(c);
+ c->elemalg->copy(c->elemsize, ep, nil);
*pres = false;
return;
}
@@ -335,6 +336,7 @@ asynch:
if(pres != nil) {
unlock(c);
+ c->elemalg->copy(c->elemsize, ep, nil);
*pres = false;
return;
}
diff --git a/test/fixedbugs/bug234.go b/test/fixedbugs/bug234.go
new file mode 100644
index 000000000..882bc7401
--- /dev/null
+++ b/test/fixedbugs/bug234.go
@@ -0,0 +1,20 @@
+// $G $D/$F.go && $L $F.$A && ./$A.out
+
+// Copyright 2009 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+func main() {
+ c := make(chan int, 1)
+ c <- 100
+ x, ok := <-c
+ if x != 100 || !ok {
+ panic("x=", x, " ok=", ok, " want 100, true")
+ }
+ x, ok = <-c
+ if x != 0 || ok {
+ panic("x=", x, " ok=", ok, " want 0, false")
+ }
+}