diff --git a/client.go b/client.go index 031a442..5cad740 100644 --- a/client.go +++ b/client.go @@ -83,7 +83,7 @@ func (c *Client) Close() { defer c.mu.Unlock() for _, target := range c.targets { - close(target.stop) + target.close() } } diff --git a/target.go b/target.go index bf5916d..ce0e4c4 100644 --- a/target.go +++ b/target.go @@ -18,6 +18,7 @@ type Target struct { windowSeconds float64 rateClasses []*rateClass stop chan bool + done chan bool lastEvent time.Time events []*Event } @@ -39,6 +40,11 @@ func (target *Target) AddRateClass(grantRate float64, vals ...any) { target.rateClasses = append(target.rateClasses, erc) } +func (target *Target) close() { + close(target.stop) + <-target.done +} + func (target *Target) writeEvent(ev *Event) { now := time.Now() secondsSinceLastEvent := now.Sub(target.lastEvent).Seconds() @@ -74,6 +80,8 @@ func (target *Target) writeEvent(ev *Event) { } func (target *Target) flushLoop(c *Client) { + defer close(target.done) + t := time.NewTicker(time.Duration(target.writePeriodSeconds * float64(time.Second))) defer t.Stop()