From 3cd5294d8a337ee5cd2ec894c9fbe04ad3a7690d Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Tue, 1 Sep 2015 11:14:27 +0200 Subject: Implemented strict locking of global lists --- eitscan.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'eitscan.c') diff --git a/eitscan.c b/eitscan.c index 027bf44c..c9b528aa 100644 --- a/eitscan.c +++ b/eitscan.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: eitscan.c 2.7 2012/04/07 14:39:28 kls Exp $ + * $Id: eitscan.c 4.1 2015/07/18 10:16:51 kls Exp $ */ #include "eitscan.h" @@ -45,13 +45,13 @@ int cScanData::Compare(const cListObject &ListObject) const class cScanList : public cList { public: - void AddTransponders(cList *Channels); + void AddTransponders(const cList *Channels); void AddTransponder(const cChannel *Channel); }; -void cScanList::AddTransponders(cList *Channels) +void cScanList::AddTransponders(const cList *Channels) { - for (cChannel *ch = Channels->First(); ch; ch = Channels->Next(ch)) + for (const cChannel *ch = Channels->First(); ch; ch = Channels->Next(ch)) AddTransponder(ch); Sort(); } @@ -118,7 +118,8 @@ void cEITScanner::ForceScan(void) void cEITScanner::Activity(void) { if (currentChannel) { - Channels.SwitchTo(currentChannel); + LOCK_CHANNELS_READ; + Channels->SwitchTo(currentChannel); currentChannel = 0; } lastActivity = time(NULL); @@ -129,7 +130,8 @@ void cEITScanner::Process(void) if (Setup.EPGScanTimeout || !lastActivity) { // !lastActivity means a scan was forced time_t now = time(NULL); if (now - lastScan > ScanTimeout && now - lastActivity > ActivityTimeout) { - if (Channels.Lock(false, 10)) { + cStateKey StateKey; + if (const cChannels *Channels = cChannels::GetChannelsRead(StateKey, 10)) { if (!scanList) { scanList = new cScanList; if (transponderList) { @@ -137,7 +139,7 @@ void cEITScanner::Process(void) delete transponderList; transponderList = NULL; } - scanList->AddTransponders(&Channels); + scanList->AddTransponders(Channels); } bool AnyDeviceSwitched = false; for (int i = 0; i < cDevice::NumDevices(); i++) { @@ -177,7 +179,7 @@ void cEITScanner::Process(void) if (lastActivity == 0) // this was a triggered scan Activity(); } - Channels.Unlock(); + StateKey.Remove(); } lastScan = time(NULL); } -- cgit v1.2.3