summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGusted <williamzijl7@hotmail.com>2022-04-27 15:32:04 +0000
committerGitHub <noreply@github.com>2022-04-27 10:32:04 -0500
commitb5383590de41b4311663e1d81ab5892054b6ce94 (patch)
tree9e5d640544f7eb8459fc957525c8d7df5be9e582
parentaf09136b95486e41ebd458e5209fd53a3b308447 (diff)
downloadgitea-b5383590de41b4311663e1d81ab5892054b6ce94.tar.gz
gitea-b5383590de41b4311663e1d81ab5892054b6ce94.zip
Fix 64-bit atomic operations on 32-bit machines (#19531)
- Doing 64-bit atomic operations on 32-bit machines is a bit tricky by golang, as they can only be done under certain set of conditions(https://pkg.go.dev/sync/atomic#pkg-note-BUG). - This PR fixes such case whereby the conditions weren't met, it moves the int64 to the first field of the struct, which will 64-bit operations happening on this property on 32-bit machines. - Resolves #19518
-rw-r--r--modules/queue/workerpool.go5
1 files changed, 4 insertions, 1 deletions
diff --git a/modules/queue/workerpool.go b/modules/queue/workerpool.go
index 2d8504598a..bdf04a363b 100644
--- a/modules/queue/workerpool.go
+++ b/modules/queue/workerpool.go
@@ -22,6 +22,10 @@ import (
// they use to detect if there is a block and will grow and shrink in
// response to demand as per configuration.
type WorkerPool struct {
+ // This field requires to be the first one in the struct.
+ // This is to allow 64 bit atomic operations on 32-bit machines.
+ // See: https://pkg.go.dev/sync/atomic#pkg-note-BUG & Gitea issue 19518
+ numInQueue int64
lock sync.Mutex
baseCtx context.Context
baseCtxCancel context.CancelFunc
@@ -38,7 +42,6 @@ type WorkerPool struct {
blockTimeout time.Duration
boostTimeout time.Duration
boostWorkers int
- numInQueue int64
}
var (