Serialize settings applies; log fallback save error
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user