Fixed the locking sequence when starting a recording

This commit is contained in:
Klaus Schmidinger 2017-05-29 08:18:17 +02:00
parent 2751e239eb
commit a4c851f759
2 changed files with 7 additions and 2 deletions

View File

@ -9064,3 +9064,4 @@ Video Disk Recorder Revision History
sequence, the 20 most recent locks will be printed to stderr, followed by a sequence, the 20 most recent locks will be printed to stderr, followed by a
backtrace that led to the call in question. backtrace that led to the call in question.
- Fixed the locking sequence when dumping EPG data. - Fixed the locking sequence when dumping EPG data.
- Fixed the locking sequence when starting a recording.

8
menu.c
View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * how to reach the author.
* *
* $Id: menu.c 4.29 2017/05/21 13:18:26 kls Exp $ * $Id: menu.c 4.30 2017/05/28 21:14:20 kls Exp $
*/ */
#include "menu.h" #include "menu.h"
@ -5056,7 +5056,8 @@ cRecordControl::cRecordControl(cDevice *Device, cTimers *Timers, cTimer *Timer,
Timers->SetModified(); Timers->SetModified();
// We're going to work with an event here, so we need to prevent // We're going to work with an event here, so we need to prevent
// others from modifying any EPG data: // others from modifying any EPG data:
LOCK_SCHEDULES_READ; cStateKey SchedulesStateKey;
cSchedules::GetSchedulesRead(SchedulesStateKey);
event = NULL; event = NULL;
fileName = NULL; fileName = NULL;
@ -5092,6 +5093,7 @@ cRecordControl::cRecordControl(cDevice *Device, cTimers *Timers, cTimer *Timer,
cReplayControl::SetRecording(fileName); cReplayControl::SetRecording(fileName);
} }
timer = NULL; timer = NULL;
SchedulesStateKey.Remove();
return; return;
} }
@ -5105,6 +5107,7 @@ cRecordControl::cRecordControl(cDevice *Device, cTimers *Timers, cTimer *Timer,
cStatus::MsgRecording(device, Recording.Name(), Recording.FileName(), true); cStatus::MsgRecording(device, Recording.Name(), Recording.FileName(), true);
if (!Timer && !cReplayControl::LastReplayed()) // an instant recording, maybe from cRecordControls::PauseLiveVideo() if (!Timer && !cReplayControl::LastReplayed()) // an instant recording, maybe from cRecordControls::PauseLiveVideo()
cReplayControl::SetRecording(fileName); cReplayControl::SetRecording(fileName);
SchedulesStateKey.Remove();
LOCK_RECORDINGS_WRITE; LOCK_RECORDINGS_WRITE;
Recordings->AddByName(fileName); Recordings->AddByName(fileName);
return; return;
@ -5118,6 +5121,7 @@ cRecordControl::cRecordControl(cDevice *Device, cTimers *Timers, cTimer *Timer,
Timers->Del(timer); Timers->Del(timer);
timer = NULL; timer = NULL;
} }
SchedulesStateKey.Remove();
} }
cRecordControl::~cRecordControl() cRecordControl::~cRecordControl()