]> git.vomp.tv Git - jsonserver.git/commitdiff
Fix segv deleting resume data, due to new VDR locking system
authorChris Tallon <chris@vomp.tv>
Tue, 6 Aug 2019 16:53:58 +0000 (17:53 +0100)
committerChris Tallon <chris@vomp.tv>
Tue, 6 Aug 2019 16:53:58 +0000 (17:53 +0100)
jsonserver.c
vdrclient.c

index a725e333b90ab32c7987eaa768db910b754d700e..38039fdd61800c56aa29f90e4d421e87c4463efc 100644 (file)
@@ -128,6 +128,11 @@ bool cPluginJsonserver::Start(void)
     try
     {
       logger = spd::basic_logger_mt("jsonserver_spdlog", cfgLogFilename);
+      if (!logger)
+      {
+        dsyslog("jsonserver: Failed to initialise log object - null");
+        return false;
+      }
     }
     catch (const spd::spdlog_ex& ex)
     {
index d441ea5460d97427b82c6e4c78f5fb33d83e023b..b1d2a8a769d4228b599990a81559a2876005938d 100644 (file)
@@ -1291,12 +1291,16 @@ bool VDRClient::recresetresume(PFMap& postFields, Json::Value& js) // RETHROWS
   std::string reqfilename = getVarString(postFields, "filename");
   logger->debug("recresetresume: {}", reqfilename);
 
-  LOCK_RECORDINGS_WRITE; // may not need write, but to be safe..
 
-  cRecording *recording = Recordings->GetByName(reqfilename.c_str());
+  cStateKey StateKey;
+  const cRecordings* Recordings = cRecordings::GetRecordingsRead(StateKey);
+
+  const cRecording* recording = Recordings->GetByName(reqfilename.c_str());
 
   if (!recording)
   {
+    StateKey.Remove();
+
     js["Result"] = false;
     js["Error"] = "Could not find recording to reset resume";
     return true;
@@ -1305,6 +1309,9 @@ bool VDRClient::recresetresume(PFMap& postFields, Json::Value& js) // RETHROWS
   logger->debug("recresetresume: Reset resume for: {}", recording->Name());
 
   cResumeFile ResumeFile(recording->FileName(), recording->IsPesRecording());
+  StateKey.Remove();
+
+
   if (ResumeFile.Read() >= 0)
   {
     ResumeFile.Delete();