From 43d514f224be3ecee9f5cfe83ce926675b0a0f05 Mon Sep 17 00:00:00 2001 From: andig Date: Thu, 23 Oct 2025 22:49:28 +0200 Subject: [PATCH] chore: lock optimizer against piling goroutines --- core/site_optimizer.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/core/site_optimizer.go b/core/site_optimizer.go index 701a57e13..2e573ec12 100644 --- a/core/site_optimizer.go +++ b/core/site_optimizer.go @@ -7,6 +7,7 @@ import ( "net/http" "os" "slices" + "sync/atomic" "time" evopt "github.com/andig/evopt/client" @@ -27,6 +28,7 @@ var ( batteryPower = float32(6000) // default power of the battery in W updated time.Time + mu atomic.Uint32 ) type batteryType string @@ -52,8 +54,13 @@ type responseDetails struct { func (site *Site) optimizerUpdateAsync(battery []measurement) { var err error + if !mu.CompareAndSwap(0, 1) { + return + } + defer func() { updated = time.Now() + mu.Store(0) if r := recover(); r != nil { err = fmt.Errorf("panic %v", r)