use new aligned atomic types everywhere

See 69448b13a1 / #1969; the compiler can now ensure that a uint64
intended for atomic access is always aligned to a 64-bit boundary.
Convert atomic operations on uint32s and pointers as well.
This commit is contained in:
Shivaram Lingamneni 2022-08-10 02:47:39 -04:00
parent 507dc2d838
commit 35128bfc23
6 changed files with 25 additions and 27 deletions

View file

@ -45,10 +45,8 @@ const (
type e struct{}
type MySQL struct {
timeout *int64
trackAccountMessages uint32
db *sql.DB
logger *logger.Manager
db *sql.DB
logger *logger.Manager
insertHistory *sql.Stmt
insertSequence *sql.Stmt
@ -60,22 +58,24 @@ type MySQL struct {
config Config
wakeForgetter chan e
timeout atomic.Uint64
trackAccountMessages atomic.Uint32
}
func (mysql *MySQL) Initialize(logger *logger.Manager, config Config) {
mysql.timeout = new(int64)
mysql.logger = logger
mysql.wakeForgetter = make(chan e, 1)
mysql.SetConfig(config)
}
func (mysql *MySQL) SetConfig(config Config) {
atomic.StoreInt64(mysql.timeout, int64(config.Timeout))
mysql.timeout.Store(uint64(config.Timeout))
var trackAccountMessages uint32
if config.TrackAccountMessages {
trackAccountMessages = 1
}
atomic.StoreUint32(&mysql.trackAccountMessages, trackAccountMessages)
mysql.trackAccountMessages.Store(trackAccountMessages)
mysql.stateMutex.Lock()
mysql.config = config
mysql.stateMutex.Unlock()
@ -555,11 +555,11 @@ func (mysql *MySQL) prepareStatements() (err error) {
}
func (mysql *MySQL) getTimeout() time.Duration {
return time.Duration(atomic.LoadInt64(mysql.timeout))
return time.Duration(mysql.timeout.Load())
}
func (mysql *MySQL) isTrackingAccountMessages() bool {
return atomic.LoadUint32(&mysql.trackAccountMessages) != 0
return mysql.trackAccountMessages.Load() != 0
}
func (mysql *MySQL) logError(context string, err error) (quit bool) {