Fix #199 when ticker period is 0

This commit is contained in:
Quentin McGaw
2020-07-16 12:00:25 +00:00
parent e8526141be
commit b4a4e441c1
2 changed files with 21 additions and 30 deletions

View File

@@ -23,19 +23,17 @@ type Looper interface {
} }
type looper struct { type looper struct {
conf Configurator conf Configurator
settings settings.DNS settings settings.DNS
settingsMutex sync.RWMutex settingsMutex sync.RWMutex
logger logging.Logger logger logging.Logger
streamMerger command.StreamMerger streamMerger command.StreamMerger
uid int uid int
gid int gid int
restart chan struct{} restart chan struct{}
start chan struct{} start chan struct{}
stop chan struct{} stop chan struct{}
updateTicker chan struct{} updateTicker chan struct{}
tickerReady bool
tickerReadyMutex sync.Mutex
} }
func NewLooper(conf Configurator, settings settings.DNS, logger logging.Logger, func NewLooper(conf Configurator, settings settings.DNS, logger logging.Logger,
@@ -253,27 +251,22 @@ func (l *looper) fallbackToUnencryptedDNS() {
} }
func (l *looper) RunRestartTicker(ctx context.Context) { func (l *looper) RunRestartTicker(ctx context.Context) {
l.tickerReadyMutex.Lock() ticker := time.NewTicker(time.Hour)
l.tickerReady = true
l.tickerReadyMutex.Unlock()
var ticker *time.Ticker = nil
settings := l.GetSettings() settings := l.GetSettings()
if settings.UpdatePeriod > 0 { if settings.UpdatePeriod > 0 {
ticker = time.NewTicker(settings.UpdatePeriod) ticker = time.NewTicker(settings.UpdatePeriod)
} else {
ticker.Stop()
} }
for { for {
select { select {
case <-ctx.Done(): case <-ctx.Done():
if ticker != nil { ticker.Stop()
ticker.Stop()
}
return return
case <-ticker.C: case <-ticker.C:
l.restart <- struct{}{} l.restart <- struct{}{}
case <-l.updateTicker: case <-l.updateTicker:
if ticker != nil { ticker.Stop()
ticker.Stop()
}
period := l.GetSettings().UpdatePeriod period := l.GetSettings().UpdatePeriod
ticker = time.NewTicker(period) ticker = time.NewTicker(period)
} }

View File

@@ -125,24 +125,22 @@ func (l *looper) Run(ctx context.Context) {
} }
func (l *looper) RunRestartTicker(ctx context.Context) { func (l *looper) RunRestartTicker(ctx context.Context) {
ticker := time.NewTicker(time.Hour)
period := l.GetPeriod() period := l.GetPeriod()
var ticker *time.Ticker = nil
if period > 0 { if period > 0 {
ticker = time.NewTicker(period) ticker = time.NewTicker(period)
} else {
ticker.Stop()
} }
for { for {
select { select {
case <-ctx.Done(): case <-ctx.Done():
if ticker != nil { ticker.Stop()
ticker.Stop()
}
return return
case <-ticker.C: case <-ticker.C:
l.restart <- struct{}{} l.restart <- struct{}{}
case <-l.updateTicker: case <-l.updateTicker:
if ticker != nil { ticker.Stop()
ticker.Stop()
}
ticker = time.NewTicker(l.GetPeriod()) ticker = time.NewTicker(l.GetPeriod())
} }
} }