From 8ca82581fee3f50ffca6db852f06012fadc2b78f Mon Sep 17 00:00:00 2001 From: Balakrishnan Balasubramanian Date: Fri, 8 Sep 2023 19:35:58 -0400 Subject: [PATCH] WIP: Enter/Exit won't work :( --- idle/idle.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/idle/idle.go b/idle/idle.go index 5f3d2d7..105bb75 100644 --- a/idle/idle.go +++ b/idle/idle.go @@ -2,10 +2,32 @@ package idle import ( + "fmt" "sync/atomic" "time" ) +var ( + gIdler atomic.Pointer[idler] +) + +func Wait(timeout time.Duration) error { + i := CreateIdler(timeout).(*idler) + ok := gIdler.CompareAndSwap(nil, i) + if !ok { + return fmt.Errorf("idler already waiting") + } + i.Wait() + return nil +} + +func Tick() { + i := gIdler.Load() + if i != nil { + i.Tick() + } +} + type Idler interface { Enter() Exit()