Files
gluetun/internal/openvpn/helpers.go
2021-08-18 15:52:38 +00:00

43 lines
834 B
Go

package openvpn
import (
"context"
"time"
"github.com/qdm12/gluetun/internal/constants"
"github.com/qdm12/gluetun/internal/models"
)
func (l *Loop) crashed(ctx context.Context, err error) {
l.signalOrSetStatus(constants.Crashed)
l.logAndWait(ctx, err)
}
func (l *Loop) signalOrSetStatus(status models.LoopStatus) {
if l.userTrigger {
l.userTrigger = false
select {
case l.running <- status:
default: // receiver calling ApplyStatus dropped out
}
} else {
l.statusManager.SetStatus(status)
}
}
func (l *Loop) logAndWait(ctx context.Context, err error) {
if err != nil {
l.logger.Error(err.Error())
}
l.logger.Info("retrying in " + l.backoffTime.String())
timer := time.NewTimer(l.backoffTime)
l.backoffTime *= 2
select {
case <-timer.C:
case <-ctx.Done():
if !timer.Stop() {
<-timer.C
}
}
}