Home | History | Annotate | Download | only in chan
      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 }
     35