From 113957107e0cbd98498339804d7dcdba4449761e Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Mon, 5 Jan 2004 09:56:54 +0100 Subject: [PATCH] Fixed a lockup in the EPG scanner when no non-primary device was available --- CONTRIBUTORS | 3 +++ HISTORY | 5 +++++ config.h | 6 +++--- eitscan.c | 22 ++++++++++------------ 4 files changed, 21 insertions(+), 15 deletions(-) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index d2f715dd..37de3a0f 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -887,3 +887,6 @@ Pedro Miguel Sequeira de Justo Teixeira Antonino Sergi for adding 'StreamType' setting to CAM communication + +Martin Holst + for reporting a lockup in 1.3.0 when the EPG scanner kicks in diff --git a/HISTORY b/HISTORY index 053caf66..98a48efe 100644 --- a/HISTORY +++ b/HISTORY @@ -2537,3 +2537,8 @@ Video Disk Recorder Revision History - Limited the line length in the EPG bugfix report, which appears to fix a buffer overflow that caused a crash when cleaning up the EPG data (at 05:00 in the morning). + +2004-01-05: Version 1.3.1 + +- Fixed a lockup in the EPG scanner when no non-primary device was available + (thanks to Martin Holst for reporting this one). diff --git a/config.h b/config.h index 08368e4c..494cca3d 100644 --- a/config.h +++ b/config.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: config.h 1.178 2003/12/27 13:57:56 kls Exp $ + * $Id: config.h 1.179 2004/01/05 09:56:54 kls Exp $ */ #ifndef __CONFIG_H @@ -19,8 +19,8 @@ #include "device.h" #include "tools.h" -#define VDRVERSION "1.3.0" -#define VDRVERSNUM 10300 // Version * 10000 + Major * 100 + Minor +#define VDRVERSION "1.3.1" +#define VDRVERSNUM 10301 // Version * 10000 + Major * 100 + Minor #define MAXPRIORITY 99 #define MAXLIFETIME 99 diff --git a/eitscan.c b/eitscan.c index d4d1e8f3..755bddf1 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 1.15 2004/01/04 12:28:00 kls Exp $ + * $Id: eitscan.c 1.16 2004/01/05 09:51:25 kls Exp $ */ #include "eitscan.h" @@ -110,13 +110,11 @@ void cEITScanner::Process(void) for (bool AnyDeviceSwitched = false; !AnyDeviceSwitched; ) { cScanData *ScanData = NULL; for (int i = 0; i < cDevice::NumDevices(); i++) { - cDevice *Device = cDevice::GetDevice(i); - if (Device) { - if (Device != cDevice::PrimaryDevice() || (cDevice::NumDevices() == 1 && Setup.EPGScanTimeout && now - lastActivity > Setup.EPGScanTimeout * 3600)) { - if (!(Device->Receiving(true) || Device->Replaying())) { - if (!ScanData) - ScanData = scanList->First(); - if (ScanData) { + if (ScanData || (ScanData = scanList->First()) != NULL) { + cDevice *Device = cDevice::GetDevice(i); + if (Device) { + if (Device != cDevice::PrimaryDevice() || (cDevice::NumDevices() == 1 && Setup.EPGScanTimeout && now - lastActivity > Setup.EPGScanTimeout * 3600)) { + if (!(Device->Receiving(true) || Device->Replaying())) { cChannel *Channel = ScanData->GetChannel(); //XXX if (Device->ProvidesTransponder(Channel)) { if ((!Channel->Ca() || Channel->Ca() == Device->DeviceNumber() + 1 || Channel->Ca() >= 0x0100) && Device->ProvidesTransponder(Channel)) { //XXX temporary for the 'sky' plugin @@ -130,11 +128,11 @@ void cEITScanner::Process(void) AnyDeviceSwitched = true; } } - else - break; } } } + else + break; } if (ScanData && !AnyDeviceSwitched) { scanList->Del(ScanData); @@ -146,9 +144,9 @@ void cEITScanner::Process(void) break; } } - Channels.Unlock(); - lastScan = time(NULL); } + lastScan = time(NULL); + Channels.Unlock(); } } }