mirror of
https://github.com/tendermint/tendermint.git
synced 2026-01-06 21:36:26 +00:00
[common] revert started flag when service already stopped (#2326)
also, return ErrNotStarted when trying to stop a not-running service
This commit is contained in:
committed by
Ethan Buchman
parent
1ea64fc27f
commit
e3e3c13741
@@ -9,8 +9,15 @@ import (
|
||||
)
|
||||
|
||||
var (
|
||||
// ErrAlreadyStarted is returned when somebody tries to start an already
|
||||
// running service.
|
||||
ErrAlreadyStarted = errors.New("already started")
|
||||
// ErrAlreadyStopped is returned when somebody tries to stop an already
|
||||
// stopped service (without resetting it).
|
||||
ErrAlreadyStopped = errors.New("already stopped")
|
||||
// ErrNotStarted is returned when somebody tries to stop a not running
|
||||
// service.
|
||||
ErrNotStarted = errors.New("not started")
|
||||
)
|
||||
|
||||
// Service defines a service that can be started, stopped, and reset.
|
||||
@@ -124,6 +131,8 @@ func (bs *BaseService) Start() error {
|
||||
if atomic.CompareAndSwapUint32(&bs.started, 0, 1) {
|
||||
if atomic.LoadUint32(&bs.stopped) == 1 {
|
||||
bs.Logger.Error(fmt.Sprintf("Not starting %v -- already stopped", bs.name), "impl", bs.impl)
|
||||
// revert flag
|
||||
atomic.StoreUint32(&bs.started, 0)
|
||||
return ErrAlreadyStopped
|
||||
}
|
||||
bs.Logger.Info(fmt.Sprintf("Starting %v", bs.name), "impl", bs.impl)
|
||||
@@ -148,6 +157,12 @@ func (bs *BaseService) OnStart() error { return nil }
|
||||
// channel. An error will be returned if the service is already stopped.
|
||||
func (bs *BaseService) Stop() error {
|
||||
if atomic.CompareAndSwapUint32(&bs.stopped, 0, 1) {
|
||||
if atomic.LoadUint32(&bs.started) == 0 {
|
||||
bs.Logger.Error(fmt.Sprintf("Not stopping %v -- have not been started yet", bs.name), "impl", bs.impl)
|
||||
// revert flag
|
||||
atomic.StoreUint32(&bs.stopped, 0)
|
||||
return ErrNotStarted
|
||||
}
|
||||
bs.Logger.Info(fmt.Sprintf("Stopping %v", bs.name), "impl", bs.impl)
|
||||
bs.impl.OnStop()
|
||||
close(bs.quit)
|
||||
|
||||
Reference in New Issue
Block a user