OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [go.test/] [test/] [chan/] [select6.go] - Blame information for rev 858

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 700 jeremybenn
// $G $D/$F.go && $L $F.$A && ./$A.out
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
// 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
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.