Serialize settings applies; log fallback save error

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-01 20:24:17 -04:00
parent 324aa3ebce
commit 326990d69a
3 changed files with 6 additions and 1 deletions
+3 -1
View File
@@ -82,7 +82,9 @@ func main() {
if err := applyFn(cfg); err != nil { if err := applyFn(cfg); err != nil {
log.Printf("settings: %v; falling back to claude backend", err) log.Printf("settings: %v; falling back to claude backend", err)
cfg.AIBackend = "claude" cfg.AIBackend = "claude"
_ = settings.Save(settingsPath, cfg) if err := settings.Save(settingsPath, cfg); err != nil {
log.Printf("settings: could not persist claude fallback to %s: %v", settingsPath, err)
}
if err := applyFn(cfg); err != nil { if err := applyFn(cfg); err != nil {
log.Fatalf("settings: apply failed even with claude: %v", err) log.Fatalf("settings: apply failed even with claude: %v", err)
} }
+2
View File
@@ -40,6 +40,8 @@ func (s *Server) handlePostSettings(c *gin.Context) {
c.JSON(http.StatusBadRequest, gin.H{"error": "invalid json"}) c.JSON(http.StatusBadRequest, gin.H{"error": "invalid json"})
return return
} }
s.applyMu.Lock()
defer s.applyMu.Unlock()
s.settingsMu.Lock() s.settingsMu.Lock()
apply := s.applyFn apply := s.applyFn
path := s.settingsPath path := s.settingsPath
+1
View File
@@ -35,6 +35,7 @@ type Server struct {
settings settings.Settings settings settings.Settings
settingsPath string settingsPath string
applyFn func(settings.Settings) error applyFn func(settings.Settings) error
applyMu sync.Mutex // serializes POST /settings apply+save
} }
func NewServer(ctrl *session.Controller) *Server { func NewServer(ctrl *session.Controller) *Server {