mirror of
				https://github.com/vdr-projects/vdr.git
				synced 2025-03-01 10:50:46 +00:00 
			
		
		
		
	Fixed a lockup in the EPG scanner when no non-primary device was available
This commit is contained in:
		| @@ -887,3 +887,6 @@ Pedro Miguel Sequeira de Justo Teixeira <pedro.miguel.teixeira@bigfoot.com> | ||||
|  | ||||
| Antonino Sergi <voyaser@tiscalinet.it> | ||||
|  for adding 'StreamType' setting to CAM communication | ||||
|  | ||||
| Martin Holst <holstm@gmx.de> | ||||
|  for reporting a lockup in 1.3.0 when the EPG scanner kicks in | ||||
|   | ||||
							
								
								
									
										5
									
								
								HISTORY
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								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). | ||||
|   | ||||
							
								
								
									
										6
									
								
								config.h
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								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 | ||||
|   | ||||
							
								
								
									
										22
									
								
								eitscan.c
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								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(); | ||||
|         } | ||||
|      } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user