Fix: public IP loop being stuck

This commit is contained in:
Quentin McGaw (desktop)
2021-07-26 01:35:43 +00:00
parent 8105437815
commit ab910403c6
2 changed files with 12 additions and 11 deletions

View File

@@ -40,6 +40,7 @@ type Loop struct {
stopped chan struct{}
updateTicker chan struct{}
backoffTime time.Duration
userTrigger bool
// Mock functions
timeNow func() time.Time
}
@@ -66,11 +67,12 @@ func NewLoop(client *http.Client, logger logging.Logger,
logger: logger,
puid: puid,
pgid: pgid,
start: make(chan struct{}),
running: make(chan models.LoopStatus),
stop: make(chan struct{}),
stopped: make(chan struct{}),
updateTicker: make(chan struct{}),
start: start,
running: running,
stop: stop,
stopped: stopped,
updateTicker: updateTicker,
userTrigger: true,
backoffTime: defaultBackoffTime,
timeNow: time.Now,
}

View File

@@ -15,8 +15,6 @@ type Runner interface {
func (l *Loop) Run(ctx context.Context, done chan<- struct{}) {
defer close(done)
crashed := false
select {
case <-l.start:
case <-ctx.Done():
@@ -40,10 +38,10 @@ func (l *Loop) Run(ctx context.Context, done chan<- struct{}) {
ipCh <- ip
}()
if !crashed {
if l.userTrigger {
l.userTrigger = false
l.running <- constants.Running
crashed = false
} else {
} else { // crash
l.backoffTime = defaultBackoffTime
l.statusManager.SetStatus(constants.Running)
}
@@ -61,9 +59,11 @@ func (l *Loop) Run(ctx context.Context, done chan<- struct{}) {
}
return
case <-l.start:
l.userTrigger = true
getCancel()
stayHere = false
case <-l.stop:
l.userTrigger = true
l.logger.Info("stopping")
getCancel()
<-errorCh
@@ -92,7 +92,6 @@ func (l *Loop) Run(ctx context.Context, done chan<- struct{}) {
close(ipCh)
l.statusManager.SetStatus(constants.Crashed)
l.logAndWait(ctx, err)
crashed = true
stayHere = false
}
}