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
14package main
15
16func 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}
35