0
Fork 0
mirror of https://codeberg.org/forgejo/forgejo.git synced 2025-04-03 01:11:55 -05:00
forgejo/modules
zeripath 3ad62127df
Correctly handle select on multiple channels in Queues (#22146) (#22428)
Backport #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>
2023-01-13 20:42:42 +00:00
..
activitypub Fix dashboard ignored system setting cache (#21621) (#21759) 2022-11-10 19:41:44 +08:00
analyze
auth
avatar Replace all instances of fmt.Errorf(%v) with fmt.Errorf(%w) (#21551) 2022-10-24 20:29:17 +01:00
base Add generic set type (#21408) 2022-10-12 13:18:26 +08:00
cache Fix get system setting bug when enabled redis cache (#22298) 2023-01-01 23:24:01 +08:00
charset Ensure that plain files are rendered correctly even when containing ambiguous characters (#22017) (#22160) 2022-12-19 23:51:21 +08:00
container Add generic set type (#21408) 2022-10-12 13:18:26 +08:00
context refactor auth interface to return error when verify failure (#22119) (#22259) 2022-12-29 13:50:09 +08:00
convert Use GhostUser if needed for TrackedTimes (#22021) (#22029) 2022-12-05 14:20:37 +02:00
csv
doctor Prevent dangling user redirects (#21856) (#21858) 2022-11-18 22:25:00 +08:00
emoji Update Emoji dataset to Unicode 14 (#22342) (#22343) 2023-01-04 12:45:18 -06:00
eventsource
generate
git Use complete SHA to create and query commit status (#22244) (#22257) 2022-12-28 11:03:21 +01:00
gitgraph Refactor git command arguments and make all arguments to be safe to be used (#21535) 2022-10-23 22:44:45 +08:00
graceful Replace all instances of fmt.Errorf(%v) with fmt.Errorf(%w) (#21551) 2022-10-24 20:29:17 +01:00
hcaptcha
highlight Upgrade chroma to v2.3.0 (#21259) 2022-09-26 13:50:03 +08:00
hostmatcher Replace all instances of fmt.Errorf(%v) with fmt.Errorf(%w) (#21551) 2022-10-24 20:29:17 +01:00
httpcache
httplib
indexer Replace all instances of fmt.Errorf(%v) with fmt.Errorf(%w) (#21551) 2022-10-24 20:29:17 +01:00
issue/template Use path not filepath in template filenames (#21993) (#22022) 2022-12-04 13:58:58 +08:00
json
lfs
log Replace all instances of fmt.Errorf(%v) with fmt.Errorf(%w) (#21551) 2022-10-24 20:29:17 +01:00
markup Support comma-delimited string as labels in issue template (#21831) (#21873) 2022-11-20 10:44:20 +00:00
mcaptcha Replace all instances of fmt.Errorf(%v) with fmt.Errorf(%w) (#21551) 2022-10-24 20:29:17 +01:00
metrics
migration Add more checks in migration code (#21011) 2022-09-04 13:47:56 +03:00
mirror
nosql
notification Decouple HookTask from Repository (#17940) 2022-10-21 18:21:56 +02:00
options Replace all instances of fmt.Errorf(%v) with fmt.Errorf(%w) (#21551) 2022-10-24 20:29:17 +01:00
packages Normalize NuGet package version on upload (#22186) (#22200) 2022-12-21 14:50:17 -06:00
paginator Remove unnecessary misspell ignore pattern (#21475) 2022-10-18 12:52:25 -04:00
password
pprof
private Replace all instances of fmt.Errorf(%v) with fmt.Errorf(%w) (#21551) 2022-10-24 20:29:17 +01:00
process
proxy
proxyprotocol
public Add generic set type (#21408) 2022-10-12 13:18:26 +08:00
queue Correctly handle select on multiple channels in Queues (#22146) (#22428) 2023-01-13 20:42:42 +00:00
recaptcha Replace all instances of fmt.Errorf(%v) with fmt.Errorf(%w) (#21551) 2022-10-24 20:29:17 +01:00
references Remove unnecessary misspell ignore pattern (#21475) 2022-10-18 12:52:25 -04:00
regexplru
repository Replace all instances of fmt.Errorf(%v) with fmt.Errorf(%w) (#21551) 2022-10-24 20:29:17 +01:00
secret
session
setting Allow HOST has no port (#22280) (#22409) 2023-01-12 09:57:03 +08:00
sitemap Fix sitemap (#22272) (#22320) 2023-01-03 22:03:56 +08:00
ssh
storage Local storage should not store files as executable (#22162) (#22163) 2022-12-19 01:12:25 +02:00
structs Add sync_on_commit option for push mirrors api (#22271) (#22292) 2022-12-31 19:46:14 +08:00
svg
sync Add generic set type (#21408) 2022-10-12 13:18:26 +08:00
system Fix dashboard ignored system setting cache (#21621) (#21759) 2022-11-10 19:41:44 +08:00
templates Display error log when a modified template has an error so that it could recovery when the error fixed (#22261) (#22321) 2023-01-03 19:39:58 +08:00
test
timeutil Check for zero time instant in TimeStamp.IsZero() (#22171) (#22172) 2022-12-20 10:04:46 +08:00
translation Make every not exist error unwrappable to a fs.ErrNotExist (#20891) 2022-10-18 07:50:37 +02:00
typesniffer
updatechecker Add system setting table with cache and also add cache supports for user setting (#18058) 2022-10-17 07:29:26 +08:00
upload
uri
user
util Make every not exist error unwrappable to a fs.ErrNotExist (#20891) 2022-10-18 07:50:37 +02:00
validation Add more checks in migration code (#21011) 2022-09-04 13:47:56 +03:00
watcher
web