You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
zeripath a609cae9fb
Correctly handle select on multiple channels in Queues (#22146)
There are a few places in FlushQueueWithContext which make an incorrect
assumption about how `select` on multiple channels works.

The problem is best expressed by looking at the following example:

```go
package main

import "fmt"

func main() {
    closedChan := make(chan struct{})
    close(closedChan)
    toClose := make(chan struct{})
    count := 0

    for {
        select {
        case <-closedChan:
            count++
            fmt.Println(count)
            if count == 2 {
                close(toClose)
            }
        case <-toClose:
            return
        }
    }
}
```

This PR double-checks that the contexts are closed outside of checking
if there is data in the dataChan. It also rationalises the WorkerPool
FlushWithContext because the previous implementation failed to handle
pausing correctly. This will probably fix the underlying problem in
 #22145

Fix #22145

Signed-off-by: Andrew Thornton <art27@cantab.net>

Signed-off-by: Andrew Thornton <art27@cantab.net>
1 year ago
..
bytefifo.go Implement FSFE REUSE for golang files (#21840) 1 year ago
helper.go Implement FSFE REUSE for golang files (#21840) 1 year ago
manager.go Implement FSFE REUSE for golang files (#21840) 1 year ago
queue.go Implement FSFE REUSE for golang files (#21840) 1 year ago
queue_bytefifo.go Implement FSFE REUSE for golang files (#21840) 1 year ago
queue_channel.go Correctly handle select on multiple channels in Queues (#22146) 1 year ago
queue_channel_test.go Implement FSFE REUSE for golang files (#21840) 1 year ago
queue_disk.go Implement FSFE REUSE for golang files (#21840) 1 year ago
queue_disk_channel.go Implement FSFE REUSE for golang files (#21840) 1 year ago
queue_disk_channel_test.go Implement FSFE REUSE for golang files (#21840) 1 year ago
queue_disk_test.go Implement FSFE REUSE for golang files (#21840) 1 year ago
queue_redis.go Implement FSFE REUSE for golang files (#21840) 1 year ago
queue_test.go Implement FSFE REUSE for golang files (#21840) 1 year ago
queue_wrapped.go Implement FSFE REUSE for golang files (#21840) 1 year ago
setting.go Implement FSFE REUSE for golang files (#21840) 1 year ago
unique_queue.go Implement FSFE REUSE for golang files (#21840) 1 year ago
unique_queue_channel.go Correctly handle select on multiple channels in Queues (#22146) 1 year ago
unique_queue_channel_test.go Implement FSFE REUSE for golang files (#21840) 1 year ago
unique_queue_disk.go Implement FSFE REUSE for golang files (#21840) 1 year ago
unique_queue_disk_channel.go Implement FSFE REUSE for golang files (#21840) 1 year ago
unique_queue_redis.go Implement FSFE REUSE for golang files (#21840) 1 year ago
unique_queue_wrapped.go Implement FSFE REUSE for golang files (#21840) 1 year ago
workerpool.go Correctly handle select on multiple channels in Queues (#22146) 1 year ago