fix crash on restart due to change #1030

This commit is contained in:
Alireza Ahmadi
2026-02-28 01:52:34 +01:00
parent 5812d6a827
commit 13d475da20
5 changed files with 39 additions and 23 deletions
+2 -8
View File
@@ -386,13 +386,7 @@ func (a *ApiService) DeleteToken(c *gin.Context) {
}
func (a *ApiService) GetSingboxConfig(c *gin.Context) {
config, err := a.ConfigService.GetConfig("")
if err != nil {
c.Status(400)
c.Writer.WriteString(err.Error())
return
}
rawConfig, err := json.MarshalIndent(config, "", " ")
rawConfig, err := a.ConfigService.GetConfig("")
if err != nil {
c.Status(400)
c.Writer.WriteString(err.Error())
@@ -400,7 +394,7 @@ func (a *ApiService) GetSingboxConfig(c *gin.Context) {
}
c.Header("Content-Type", "application/json")
c.Header("Content-Disposition", "attachment; filename=config_"+time.Now().Format("20060102-150405")+".json")
c.Writer.Write(rawConfig)
c.Writer.Write(*rawConfig)
}
func (a *ApiService) GetCheckOutbound(c *gin.Context) {
+1 -1
View File
@@ -79,7 +79,7 @@ func (a *APP) Start() error {
return err
}
err = a.configService.StartCore("")
err = a.configService.StartCore()
if err != nil {
logger.Error(err)
}
+3
View File
@@ -83,6 +83,9 @@ func (c *Core) Start(sbConfig []byte) error {
func (c *Core) Stop() error {
c.isRunning = false
if c.instance != nil {
return nil
}
return c.instance.Close()
}
+1 -1
View File
@@ -13,5 +13,5 @@ func NewCheckCoreJob() *CheckCoreJob {
}
func (s *CheckCoreJob) Run() {
s.ConfigService.StartCore("")
s.ConfigService.StartCore()
}
+32 -13
View File
@@ -44,7 +44,7 @@ func NewConfigService(core *core.Core) *ConfigService {
return &ConfigService{}
}
func (s *ConfigService) GetConfig(data string) (*SingBoxConfig, error) {
func (s *ConfigService) GetConfig(data string) (*[]byte, error) {
var err error
if len(data) == 0 {
data, err = s.SettingService.GetConfig()
@@ -74,22 +74,22 @@ func (s *ConfigService) GetConfig(data string) (*SingBoxConfig, error) {
if err != nil {
return nil, err
}
return &singboxConfig, nil
rawConfig, err := json.MarshalIndent(singboxConfig, "", " ")
if err != nil {
return nil, err
}
return &rawConfig, nil
}
func (s *ConfigService) StartCore(defaultConfig string) error {
func (s *ConfigService) StartCore() error {
if corePtr.IsRunning() {
return nil
}
singboxConfig, err := s.GetConfig(defaultConfig)
rawConfig, err := s.GetConfig("")
if err != nil {
return err
}
rawConfig, err := json.MarshalIndent(singboxConfig, "", " ")
if err != nil {
return err
}
err = corePtr.Start(rawConfig)
err = corePtr.Start(*rawConfig)
if err != nil {
logger.Error("start sing-box err:", err.Error())
return err
@@ -103,15 +103,34 @@ func (s *ConfigService) RestartCore() error {
if err != nil {
return err
}
return s.StartCore("")
return s.StartCore()
}
func (s *ConfigService) restartCoreWithConfig(config json.RawMessage) error {
err := s.StopCore()
var err error
defer func() {
if err != nil {
corePtr.Stop()
logger.Error("restart sing-box err:", err.Error())
} else {
logger.Info("sing-box restarted with new config")
}
}()
if corePtr.IsRunning() {
err = corePtr.GetInstance().Close()
if err != nil {
return err
}
}
rawConfig, err := s.GetConfig(string(config))
if err != nil {
return err
}
return s.StartCore(string(config))
err = corePtr.Start(*rawConfig)
if err != nil {
return err
}
return nil
}
func (s *ConfigService) StopCore() error {
@@ -144,7 +163,7 @@ func (s *ConfigService) Save(obj string, act string, data json.RawMessage, initU
tx.Commit()
// Try to start core if it is not running
if !corePtr.IsRunning() {
s.StartCore("")
s.StartCore()
}
} else {
tx.Rollback()