fix reset core conflict
This commit is contained in:
@@ -489,6 +489,7 @@ func (s *Box) Close() error {
|
|||||||
close(s.done)
|
close(s.done)
|
||||||
}
|
}
|
||||||
var err error
|
var err error
|
||||||
|
s.logger.Info("closing sing-box")
|
||||||
for _, closeItem := range []struct {
|
for _, closeItem := range []struct {
|
||||||
name string
|
name string
|
||||||
service adapter.Lifecycle
|
service adapter.Lifecycle
|
||||||
@@ -552,6 +553,7 @@ func (s *Box) Close() error {
|
|||||||
}
|
}
|
||||||
err = errors.Join(err, closeErr)
|
err = errors.Join(err, closeErr)
|
||||||
s.logger.Trace("close logger completed (", F.Seconds(time.Since(startTime).Seconds()), "s)")
|
s.logger.Trace("close logger completed (", F.Seconds(time.Since(startTime).Seconds()), "s)")
|
||||||
|
s.logger.Info("sing-box closed (live time: ", F.Seconds(time.Since(s.createdAt).Seconds()), "s)")
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package core
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"sync"
|
|
||||||
|
|
||||||
"github.com/alireza0/s-ui/logger"
|
"github.com/alireza0/s-ui/logger"
|
||||||
|
|
||||||
@@ -29,7 +28,6 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type Core struct {
|
type Core struct {
|
||||||
mu sync.RWMutex
|
|
||||||
isRunning bool
|
isRunning bool
|
||||||
instance *Box
|
instance *Box
|
||||||
}
|
}
|
||||||
@@ -48,15 +46,10 @@ func (c *Core) GetCtx() context.Context {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *Core) GetInstance() *Box {
|
func (c *Core) GetInstance() *Box {
|
||||||
c.mu.RLock()
|
|
||||||
defer c.mu.RUnlock()
|
|
||||||
return c.instance
|
return c.instance
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Core) Start(sbConfig []byte) error {
|
func (c *Core) Start(sbConfig []byte) error {
|
||||||
c.mu.Lock()
|
|
||||||
defer c.mu.Unlock()
|
|
||||||
|
|
||||||
var opt option.Options
|
var opt option.Options
|
||||||
err := opt.UnmarshalJSONContext(globalCtx, sbConfig)
|
err := opt.UnmarshalJSONContext(globalCtx, sbConfig)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -90,9 +83,6 @@ func (c *Core) Start(sbConfig []byte) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *Core) Stop() error {
|
func (c *Core) Stop() error {
|
||||||
c.mu.Lock()
|
|
||||||
defer c.mu.Unlock()
|
|
||||||
|
|
||||||
c.isRunning = false
|
c.isRunning = false
|
||||||
if c.instance == nil {
|
if c.instance == nil {
|
||||||
return nil
|
return nil
|
||||||
@@ -103,7 +93,5 @@ func (c *Core) Stop() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *Core) IsRunning() bool {
|
func (c *Core) IsRunning() bool {
|
||||||
c.mu.RLock()
|
|
||||||
defer c.mu.RUnlock()
|
|
||||||
return c.isRunning
|
return c.isRunning
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -96,6 +96,7 @@ func (s *ConfigService) StartCore() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
if time.Since(lastStartFailTime) < startCooldown {
|
if time.Since(lastStartFailTime) < startCooldown {
|
||||||
|
logger.Info("start core cooldown ", startCooldown/time.Second, " seconds")
|
||||||
startCoreMu.Unlock()
|
startCoreMu.Unlock()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -133,6 +134,19 @@ func (s *ConfigService) RestartCore() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *ConfigService) restartCoreWithConfig(config json.RawMessage) error {
|
func (s *ConfigService) restartCoreWithConfig(config json.RawMessage) error {
|
||||||
|
startCoreMu.Lock()
|
||||||
|
if startCoreInProgress {
|
||||||
|
startCoreMu.Unlock()
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
startCoreInProgress = true
|
||||||
|
startCoreMu.Unlock()
|
||||||
|
defer func() {
|
||||||
|
startCoreMu.Lock()
|
||||||
|
startCoreInProgress = false
|
||||||
|
startCoreMu.Unlock()
|
||||||
|
}()
|
||||||
|
|
||||||
if corePtr.IsRunning() {
|
if corePtr.IsRunning() {
|
||||||
if err := corePtr.Stop(); err != nil {
|
if err := corePtr.Stop(); err != nil {
|
||||||
logger.Error("restart sing-box err (stop):", err.Error())
|
logger.Error("restart sing-box err (stop):", err.Error())
|
||||||
|
|||||||
Reference in New Issue
Block a user