Phase 2b: server/client timeouts, atomic state writes, log mutex, panic and shutdown fixes
- http.Server with ReadHeaderTimeout/IdleTimeout (no read/write timeouts: /stream/ is long-lived) - shared outbound clients: providerHTTPClient (5m), apiHTTPClient (30s), imgcache client (30s) - imgcache: download outside the lock, per-item helper, cache URL uses the file name not the fs path - writeFileAtomic (temp + fsync + rename) for settings/xepg/pms/urls/authentication JSON - one package-level logMu for WebScreenLog and notifications; ring buffer keeps the newest lines - notifications evict the oldest instead of random map entries - xepg XMLTV file removal rebuilt after the loop; data.go range-mutation removed - API handler returns after error body; WS request/response fresh per command - checked type assertions in data/backup/provider/screen - SIGINT/SIGTERM handled in main via src.Shutdown(); fatal paths exit 1
This commit is contained in:
+7
-1
@@ -172,6 +172,11 @@ func createXEPGMapping() {
|
||||
|
||||
if len(Data.XMLTV.Files) > 0 {
|
||||
|
||||
// Files that could not be read are collected here and removed after
|
||||
// the loop; mutating Data.XMLTV.Files while iterating over it used
|
||||
// to duplicate entries instead of removing them.
|
||||
var failedFiles = make(map[string]bool)
|
||||
|
||||
for i := len(Data.XMLTV.Files) - 1; i >= 0; i-- {
|
||||
|
||||
var file = Data.XMLTV.Files[i]
|
||||
@@ -185,7 +190,7 @@ func createXEPGMapping() {
|
||||
|
||||
err = getLocalXMLTV(file, &xmltv)
|
||||
if err != nil {
|
||||
Data.XMLTV.Files = append(Data.XMLTV.Files, Data.XMLTV.Files[i+1:]...)
|
||||
failedFiles[file] = true
|
||||
var errMsg = err.Error()
|
||||
err = errors.New(getProviderParameter(fileID, "xmltv", "name") + ": " + errMsg)
|
||||
ShowError(err, 000)
|
||||
@@ -215,6 +220,7 @@ func createXEPGMapping() {
|
||||
|
||||
}
|
||||
|
||||
Data.XMLTV.Files = removeStrings(Data.XMLTV.Files, failedFiles)
|
||||
Data.XMLTV.Mapping = tmpMap
|
||||
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user