forgejo-federation/modules
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>
2022-12-30 02:06:47 +02:00
..
activitypub Remove deprecated packages & staticcheck fixes (#22012) 2022-12-02 17:06:23 -05:00
analyze Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
auth Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
avatar Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
base Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
cache Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
charset Ensure that plain files are rendered correctly even when containing ambiguous characters (#22017) 2022-12-17 22:22:25 +02:00
container Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
context refactor auth interface to return error when verify failure (#22119) 2022-12-28 13:53:28 +08:00
csv Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
doctor Add doctor command for full GC of LFS (#21978) 2022-12-15 20:44:16 +00:00
emoji Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
eventsource Move convert package to services (#22264) 2022-12-29 10:57:15 +08:00
generate Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
git Use complete SHA to create and query commit status (#22244) 2022-12-27 21:12:49 +08:00
gitgraph Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
graceful Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
hcaptcha Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
highlight Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
hostmatcher Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
html Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
httpcache Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
httplib Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
indexer refactor some functions to support ctx as first parameter (#21878) 2022-12-03 10:48:26 +08:00
issue/template Use path not filepath in template filenames (#21993) 2022-12-02 07:56:51 +08:00
json Update gitea-vet to check FSFE REUSE (#22004) 2022-12-02 22:14:57 +08:00
lfs Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
log Update go dev dependencies (#22064) 2022-12-08 16:21:37 +08:00
markup Remove deadcode (#22245) 2022-12-27 09:15:35 +08:00
mcaptcha Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
metrics Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
migration Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
mirror Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
nosql Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
notification Move convert package to services (#22264) 2022-12-29 10:57:15 +08:00
options Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
packages Normalize NuGet package version on upload (#22186) 2022-12-20 22:20:23 -05:00
paginator Update gitea-vet to check FSFE REUSE (#22004) 2022-12-02 22:14:57 +08:00
password Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
pprof Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
private Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
process Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
proxy Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
proxyprotocol Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
public Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
queue Correctly handle select on multiple channels in Queues (#22146) 2022-12-30 02:06:47 +02:00
recaptcha Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
references Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
regexplru Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
repository Rename almost all Ctx functions (#22071) 2022-12-10 10:46:31 +08:00
secret Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
session Update gitea-vet to check FSFE REUSE (#22004) 2022-12-02 22:14:57 +08:00
setting Add option to prohibit fork if user reached maximum limit of repositories (#21848) 2022-12-27 15:21:14 -06:00
sitemap Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
ssh Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
storage Local storage should not store files as executable (#22162) 2022-12-19 08:50:36 +08:00
structs Add API management for issue/pull and comment attachments (#21783) 2022-12-09 14:35:56 +08:00
svg Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
sync Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
system Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
templates refactor some functions to support ctx as first parameter (#21878) 2022-12-03 10:48:26 +08:00
test refactor some functions to support ctx as first parameter (#21878) 2022-12-03 10:48:26 +08:00
timeutil Check for zero time instant in TimeStamp.IsZero() (#22171) 2022-12-20 10:04:55 +08:00
translation Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
typesniffer Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
updatechecker Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
upload Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
uri Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
user Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
util Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
validation Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
watcher Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
web refactor bind functions based on generics (#22055) 2022-12-12 16:09:26 +08:00