diff --git a/core/main.go b/core/main.go index 8870331..960ea8d 100644 --- a/core/main.go +++ b/core/main.go @@ -2,6 +2,7 @@ package core import ( "context" + "sync" "github.com/alireza0/s-ui/logger" @@ -28,6 +29,7 @@ var ( ) type Core struct { + mu sync.RWMutex isRunning bool instance *Box } @@ -46,10 +48,15 @@ func (c *Core) GetCtx() context.Context { } func (c *Core) GetInstance() *Box { + c.mu.RLock() + defer c.mu.RUnlock() return c.instance } func (c *Core) Start(sbConfig []byte) error { + c.mu.Lock() + defer c.mu.Unlock() + var opt option.Options err := opt.UnmarshalJSONContext(globalCtx, sbConfig) if err != nil { @@ -66,6 +73,7 @@ func (c *Core) Start(sbConfig []byte) error { err = c.instance.Start() if err != nil { + c.instance = nil return err } @@ -81,13 +89,20 @@ func (c *Core) Start(sbConfig []byte) error { } func (c *Core) Stop() error { + c.mu.Lock() + defer c.mu.Unlock() + c.isRunning = false if c.instance == nil { return nil } - return c.instance.Close() + err := c.instance.Close() + c.instance = nil + return err } func (c *Core) IsRunning() bool { + c.mu.RLock() + defer c.mu.RUnlock() return c.isRunning } diff --git a/service/config.go b/service/config.go index 85a41b9..8a99510 100644 --- a/service/config.go +++ b/service/config.go @@ -117,7 +117,7 @@ func (s *ConfigService) restartCoreWithConfig(config json.RawMessage) error { } }() if corePtr.IsRunning() { - err = corePtr.GetInstance().Close() + err = corePtr.Stop() if err != nil { return err }