forked from gitea/gitea
- Backport #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
This commit is contained in:
parent
928b603d19
commit
1465e0cbb2
|
@ -19,6 +19,10 @@ import (
|
||||||
// they use to detect if there is a block and will grow and shrink in
|
// they use to detect if there is a block and will grow and shrink in
|
||||||
// response to demand as per configuration.
|
// response to demand as per configuration.
|
||||||
type WorkerPool struct {
|
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
|
lock sync.Mutex
|
||||||
baseCtx context.Context
|
baseCtx context.Context
|
||||||
baseCtxCancel context.CancelFunc
|
baseCtxCancel context.CancelFunc
|
||||||
|
@ -32,7 +36,6 @@ type WorkerPool struct {
|
||||||
blockTimeout time.Duration
|
blockTimeout time.Duration
|
||||||
boostTimeout time.Duration
|
boostTimeout time.Duration
|
||||||
boostWorkers int
|
boostWorkers int
|
||||||
numInQueue int64
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// WorkerPoolConfiguration is the basic configuration for a WorkerPool
|
// WorkerPoolConfiguration is the basic configuration for a WorkerPool
|
||||||
|
|
Loading…
Reference in New Issue