fix panic when changing log file to a nonexisting directory (#5132) (#5249)

This commit is contained in:
Alessandro Ros 2025-12-06 22:51:25 +01:00 committed by GitHub
parent 8d3c4074d8
commit a0a75dfab6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 38 additions and 2 deletions

View file

@ -1010,15 +1010,31 @@ func (p *Core) closeResources(newConf *conf.Conf, calledByAPI bool) {
} }
if closeLogger && p.logger != nil { if closeLogger && p.logger != nil {
p.logger.Close() if newConf == nil {
p.logger.Close()
}
p.logger = nil p.logger = nil
} }
} }
func (p *Core) reloadConf(newConf *conf.Conf, calledByAPI bool) error { func (p *Core) reloadConf(newConf *conf.Conf, calledByAPI bool) error {
oldLogger := p.logger
p.closeResources(newConf, calledByAPI) p.closeResources(newConf, calledByAPI)
p.conf = newConf p.conf = newConf
return p.createResources(false)
err := p.createResources(false)
if err != nil {
p.logger = oldLogger
return err
}
if p.logger != oldLogger {
oldLogger.Close()
}
return nil
} }
// APIConfigSet is called by api. // APIConfigSet is called by api.

View file

@ -132,3 +132,23 @@ func TestCoreHotReloading(t *testing.T) {
defer conn.Close() defer conn.Close()
}() }()
} }
func TestCoreHotReloadingAndLoggerError(t *testing.T) {
confPath := filepath.Join(os.TempDir(), "rtsp-conf")
err := os.WriteFile(confPath, []byte(""),
0o644)
require.NoError(t, err)
defer os.Remove(confPath)
p, ok := New([]string{confPath})
require.Equal(t, true, ok)
defer p.Close()
err = os.WriteFile(confPath, []byte("logDestinations: [file]\n"+
"logFile: /nonexisting/nonexist\n"),
0o644)
require.NoError(t, err)
p.Wait()
}