| // $G $D/$F.go && $L $F.$A && ./$A.out | 
 |  | 
 | // Copyright 2011 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. | 
 |  | 
 | // Issue 2075 | 
 | // A bug in select corrupts channel queues of failed cases | 
 | // if there are multiple waiters on those channels and the | 
 | // select is the last in the queue. If further waits are made | 
 | // on the channel without draining it first then those waiters | 
 | // will never wake up. In the code below c1 is such a channel. | 
 |  | 
 | package main | 
 |  | 
 | func main() { | 
 | 	c1 := make(chan bool) | 
 | 	c2 := make(chan bool) | 
 | 	c3 := make(chan bool) | 
 | 	go func() { <-c1 }() | 
 | 	go func() { | 
 | 		select { | 
 | 		case <-c1: | 
 | 			panic("dummy") | 
 | 		case <-c2: | 
 | 			c3 <- true | 
 | 		} | 
 | 		<-c1 | 
 | 	}() | 
 | 	go func() { c2 <- true }() | 
 | 	<-c3 | 
 | 	c1 <- true | 
 | 	c1 <- true | 
 | } |