]> Cypherpunks.ru repositories - gostls13.git/blob - test/chan/select6.go
cmd/compile/internal/inline: score call sites exposed by inlines
[gostls13.git] / test / chan / select6.go
1 // run
2
3 // Copyright 2011 The Go Authors. All rights reserved.
4 // Use of this source code is governed by a BSD-style
5 // license that can be found in the LICENSE file.
6
7 // Test for select: Issue 2075
8 // A bug in select corrupts channel queues of failed cases
9 // if there are multiple waiters on those channels and the
10 // select is the last in the queue. If further waits are made
11 // on the channel without draining it first then those waiters
12 // will never wake up. In the code below c1 is such a channel.
13
14 package main
15
16 func main() {
17         c1 := make(chan bool)
18         c2 := make(chan bool)
19         c3 := make(chan bool)
20         go func() { <-c1 }()
21         go func() {
22                 select {
23                 case <-c1:
24                         panic("dummy")
25                 case <-c2:
26                         c3 <- true
27                 }
28                 <-c1
29         }()
30         go func() { c2 <- true }()
31         <-c3
32         c1 <- true
33         c1 <- true
34 }