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