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
This commit is contained in:
Gusted 2022-04-27 15:32:04 +00:00 committed by GitHub
parent af09136b95
commit b5383590de
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -22,6 +22,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
@ -38,7 +42,6 @@ type WorkerPool struct {
blockTimeout time.Duration blockTimeout time.Duration
boostTimeout time.Duration boostTimeout time.Duration
boostWorkers int boostWorkers int
numInQueue int64
} }
var ( var (