diff --git a/chill/chill.go b/chill/chill.go index adb7109..e18bf39 100644 --- a/chill/chill.go +++ b/chill/chill.go @@ -14,33 +14,43 @@ var MaxTemp int = 72500 var Sleep = time.Second * 10 var ErrChilledOut = errors.New("temperature dropped below threshold") +func getCurrentTemp() (o int, err error) { + var by []byte + by, err = os.ReadFile(TempFile) + if err != nil { + return + } + by = bytes.TrimSpace(by) + o, err = strconv.Atoi(string(by)) + return +} + func Chill(baseCtx context.Context) context.Context { ctx, cancel := context.WithCancelCause(baseCtx) + ret := func(e error) context.Context { + cancel(e) + return ctx + } + + current, err := getCurrentTemp() + if err != nil { + return ret(err) + } + + if current < MaxTemp { + return ret(ErrChilledOut) + } + go func() { - var by []byte - var err error - current := MaxTemp + 1 - - for current >= MaxTemp { - by, err = os.ReadFile(TempFile) - if err != nil { - cancel(err) - return - } - - by = bytes.TrimSpace(by) - current, err = strconv.Atoi(string(by)) - if err != nil { - cancel(err) - return - } - if current < MaxTemp { - break - } + for current >= MaxTemp && err == nil { time.Sleep(Sleep) + current, err = getCurrentTemp() } - cancel(ErrChilledOut) + if err == nil { + err = ErrChilledOut + } + cancel(err) }() return ctx