diff options
author | Klaus Schmidinger <vdr@tvdr.de> | 2002-04-21 10:09:56 +0200 |
---|---|---|
committer | Klaus Schmidinger <vdr@tvdr.de> | 2002-04-21 10:09:56 +0200 |
commit | dfb1d78abf1a849302d2b93013ad2b8252c5035c (patch) | |
tree | 28d93c1cbd677e7fdd95f5d1c29ccc46e4ce0dba | |
parent | c47891d786f4d0f6ce2d97e39a7e92e8c9276d9d (diff) | |
download | vdr-dfb1d78abf1a849302d2b93013ad2b8252c5035c.tar.gz vdr-dfb1d78abf1a849302d2b93013ad2b8252c5035c.tar.bz2 |
Fixed a possible endless loop in shifting recordings between DVB cards
-rw-r--r-- | CONTRIBUTORS | 1 | ||||
-rw-r--r-- | HISTORY | 4 | ||||
-rw-r--r-- | config.h | 4 | ||||
-rw-r--r-- | dvbapi.c | 9 | ||||
-rw-r--r-- | dvbapi.h | 4 |
5 files changed, 14 insertions, 8 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 727caedd..f0db96cd 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -122,6 +122,7 @@ Stefan Huelswitt <huels@iname.com> for fixing a crash when replaying with DEBUG_OSD=1 for fixing a crash when selecting the "Jump" function directly after setting an editing mark + for reporting a possible endless loop in shifting recordings between DVB cards Ulrich Röder <roeder@efr-net.de> for pointing out that there are channels that have a symbol rate higher than @@ -1191,7 +1191,7 @@ Video Disk Recorder Revision History same name was manually deleted on a system with more than one video directory (thanks to Dirk Wiebel for reporting this one). -2002-04-20: Version 1.0.1 +2002-04-21: Version 1.0.1 - Added some DVB-T channels for Berlin (Germany) to channels.conf.terr (thanks to Andreas Roedl). @@ -1210,3 +1210,5 @@ Video Disk Recorder Revision History editing mark (thanks to Steffen Koch for reporting and Stefan Huelswitt for fixing this one). - Fixed some missing ',' in i18n.c (thanks to Matthias Hilbig). +- Fixed a possible endless loop in shifting recordings between DVB cards (thanks + to Stefan Huelswitt for reporting this one). @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: config.h 1.109 2002/04/07 13:08:12 kls Exp $ + * $Id: config.h 1.110 2002/04/21 10:09:56 kls Exp $ */ #ifndef __CONFIG_H @@ -19,7 +19,7 @@ #include "eit.h" #include "tools.h" -#define VDRVERSION "1.0.0" +#define VDRVERSION "1.0.1" #define MAXPRIORITY 99 #define MAXLIFETIME 99 @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: dvbapi.c 1.171 2002/04/20 10:45:33 kls Exp $ + * $Id: dvbapi.c 1.172 2002/04/21 09:54:40 kls Exp $ */ #include "dvbapi.h" @@ -1812,21 +1812,24 @@ bool cDvbApi::SetPrimaryDvbApi(int n) return false; } -int cDvbApi::CanShift(int Ca, int Priority) +int cDvbApi::CanShift(int Ca, int Priority, int UsedCards) { // Test whether a recording on this DVB device can be shifted to another one // in order to perform a new recording with the given Ca and Priority on this device: int ShiftLevel = -1; // default means this device can't be shifted + if (UsedCards & (1 << CardIndex()) != 0) + return ShiftLevel; // otherwise we would get into a loop if (Recording()) { if (ProvidesCa(Ca) // this device provides the requested Ca && (Ca != this->Ca() // the requested Ca is different from the one currently used... || Priority > this->Priority())) { // ...or the request comes from a higher priority cDvbApi *d = NULL; int Provides[MAXDVBAPI]; + UsedCards |= (1 << CardIndex()); for (int i = 0; i < NumDvbApis; i++) { if ((Provides[i] = dvbApi[i]->ProvidesCa(this->Ca())) != 0) { // this device is basicly able to do the job if (dvbApi[i] != this) { // it is not _this_ device - int sl = dvbApi[i]->CanShift(this->Ca(), Priority); // this is the original Priority! + int sl = dvbApi[i]->CanShift(this->Ca(), Priority, UsedCards); // this is the original Priority! if (sl >= 0 && (ShiftLevel < 0 || sl < ShiftLevel)) { d = dvbApi[i]; ShiftLevel = sl; @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: dvbapi.h 1.68 2002/03/10 10:50:00 kls Exp $ + * $Id: dvbapi.h 1.69 2002/04/21 09:49:22 kls Exp $ */ #ifndef __DVBAPI_H @@ -104,7 +104,7 @@ private: static int useDvbApi; int cardIndex; int caCaps[MAXCACAPS]; - int CanShift(int Ca, int Priority); + int CanShift(int Ca, int Priority, int UsedCards = 0); public: static cDvbApi *PrimaryDvbApi; static void SetUseDvbApi(int n); |