mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-13 23:16:45 +00:00
Use atomic.LoadInt32/AddInt32 for database subsystem (#412)
This commit is contained in:
@@ -18,19 +18,26 @@ var (
|
||||
)
|
||||
|
||||
type databaseManager struct {
|
||||
running atomic.Value
|
||||
started int32
|
||||
stopped int32
|
||||
shutdown chan struct{}
|
||||
}
|
||||
|
||||
func (a *databaseManager) Started() bool {
|
||||
return a.running.Load() == true
|
||||
return atomic.LoadInt32(&a.started) == 1
|
||||
}
|
||||
|
||||
func (a *databaseManager) Start() (err error) {
|
||||
if a.Started() {
|
||||
if atomic.AddInt32(&a.started, 1) != 1 {
|
||||
return errors.New("database manager already started")
|
||||
}
|
||||
|
||||
defer func() {
|
||||
if err != nil {
|
||||
atomic.CompareAndSwapInt32(&a.started, 1, 0)
|
||||
}
|
||||
}()
|
||||
|
||||
log.Debugln(log.DatabaseMgr, "Database manager starting...")
|
||||
|
||||
a.shutdown = make(chan struct{})
|
||||
@@ -70,11 +77,13 @@ func (a *databaseManager) Start() (err error) {
|
||||
}
|
||||
|
||||
func (a *databaseManager) Stop() error {
|
||||
if !a.Started() {
|
||||
return errors.New("database manager already stopped")
|
||||
if atomic.LoadInt32(&a.started) == 0 {
|
||||
return errors.New("database manager not started")
|
||||
}
|
||||
|
||||
log.Debugln(log.DatabaseMgr, "Database manager shutting down...")
|
||||
if atomic.AddInt32(&a.stopped, 1) != 1 {
|
||||
return errors.New("database manager is already stopping")
|
||||
}
|
||||
|
||||
err := dbConn.SQL.Close()
|
||||
if err != nil {
|
||||
@@ -91,11 +100,10 @@ func (a *databaseManager) run() {
|
||||
|
||||
t := time.NewTicker(time.Second * 2)
|
||||
|
||||
a.running.Store(true)
|
||||
|
||||
defer func() {
|
||||
t.Stop()
|
||||
a.running.Store(false)
|
||||
atomic.CompareAndSwapInt32(&a.stopped, 1, 0)
|
||||
atomic.CompareAndSwapInt32(&a.started, 1, 0)
|
||||
|
||||
Bot.ServicesWG.Done()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user