aboutsummaryrefslogtreecommitdiff
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
commitd16bc7a9f2143c74f72f96f0769504cf237c9c70 (patch)
tree996743330e6ae28631481741db91ce75d82779d9
parentc715b58dadfce3647dc33c60c276f1b557f08612 (diff)
downloadgo-d16bc7a9f2143c74f72f96f0769504cf237c9c70.tar.gz
go-d16bc7a9f2143c74f72f96f0769504cf237c9c70.zip
runtime: return zero value in x, ok = <-c when ok == false
Fixes #401. R=ken2 https://golang.org/cl/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 633ff426e8..f0202cf66b 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 0000000000..882bc74017
--- /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")
+ }
+}