diff --git a/CONTRIBUTORS b/CONTRIBUTORS index a560ebb3..9a07ecce 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -3297,6 +3297,8 @@ Matthias Senzel prematurely" from "error" to "info" for suggesting to allow opening a folder when selecting a folder for a recording or timer, even if it doesn't contain any subfolders + for reporting a possible locking problem in cMenuPathEdit::ApplyChanges() when the + lock is held while the error message is displayed Marek Nazarko for translating OSD texts to the Polish language diff --git a/HISTORY b/HISTORY index 4cd5ae54..16d77b9b 100644 --- a/HISTORY +++ b/HISTORY @@ -9162,7 +9162,7 @@ Video Disk Recorder Revision History a subdirectory. - SVDRP peering can now be limited to the default SVDRP host (see MANUAL for details). -2018-01-16: Version 2.3.9 +2018-01-17: Version 2.3.9 - Updated the Italian OSD texts (thanks to Diego Pierotto). - Updated the Finnish OSD texts (thanks to Rolf Ahrenberg). @@ -9243,3 +9243,5 @@ Video Disk Recorder Revision History - Moved any locking from cutter.c into recording.c, to avoid a problem with locking the Recordings list (reported by Matthias Senzel). - Now using the 'example' macro in vdr.5 (thanks to Chris Mayo). +- Now unlocking the Recordings list before displaying an error message in + cMenuPathEdit::ApplyChanges() and cReplayControl::Stop() (reported by Matthias Senzel). diff --git a/menu.c b/menu.c index 300732d3..d823ea2d 100644 --- a/menu.c +++ b/menu.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: menu.c 4.53 2017/12/15 13:27:20 kls Exp $ + * $Id: menu.c 4.54 2018/01/17 10:21:29 kls Exp $ */ #include "menu.h" @@ -2492,13 +2492,18 @@ eOSState cMenuPathEdit::ApplyChanges(void) } if (NumRecordings > 1 && !Interface->Confirm(cString::sprintf(tr("Move entire folder containing %d recordings?"), NumRecordings))) return osContinue; - LOCK_RECORDINGS_WRITE; - Recordings->SetExplicitModify(); - if (!Recordings->MoveRecordings(path, NewPath)) { + bool Error = false; + { + LOCK_RECORDINGS_WRITE; + Recordings->SetExplicitModify(); + Error = !Recordings->MoveRecordings(path, NewPath); + if (!Error) + Recordings->SetModified(); + } + if (Error) { Skins.Message(mtError, tr("Error while moving folder!")); return osContinue; } - Recordings->SetModified(); if (strcmp(folder, oldFolder)) return osUserRecMoved; return osUserRecRenamed; @@ -5541,17 +5546,22 @@ void cReplayControl::Stop(void) } } cDvbPlayerControl::Stop(); - LOCK_RECORDINGS_WRITE; - Recordings->SetExplicitModify(); - if (cRecording *Recording = Recordings->GetByName(fileName)) { - if (Recording->Delete()) { - Recordings->DelByName(fileName); - ClearLastReplayed(fileName); - Recordings->SetModified(); - } - else - Skins.Message(mtError, tr("Error while deleting recording!")); - } + bool Error = false; + { + LOCK_RECORDINGS_WRITE; + Recordings->SetExplicitModify(); + if (cRecording *Recording = Recordings->GetByName(fileName)) { + if (Recording->Delete()) { + Recordings->DelByName(fileName); + ClearLastReplayed(fileName); + Recordings->SetModified(); + } + else + Error = true; + } + } + if (Error) + Skins.Message(mtError, tr("Error while deleting recording!")); return; } }