diff options
Diffstat (limited to 'patches/.svn/text-base/vdr-1.6-device-consistent-destruct.patch.svn-base')
-rw-r--r-- | patches/.svn/text-base/vdr-1.6-device-consistent-destruct.patch.svn-base | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/patches/.svn/text-base/vdr-1.6-device-consistent-destruct.patch.svn-base b/patches/.svn/text-base/vdr-1.6-device-consistent-destruct.patch.svn-base new file mode 100644 index 0000000..9299be0 --- /dev/null +++ b/patches/.svn/text-base/vdr-1.6-device-consistent-destruct.patch.svn-base @@ -0,0 +1,97 @@ +--- ../vdr-1.6.0/device.c 2009-01-26 20:26:49.000000000 +0100 ++++ device.c 2009-01-26 22:32:03.000000000 +0100 +@@ -253,14 +253,19 @@ + for (int i = 0; i < MAXRECEIVERS; i++) + receiver[i] = NULL; + +- if (numDevices < MAXDEVICES) +- device[numDevices++] = this; +- else +- esyslog("ERROR: too many devices!"); ++ for (int i = 0; i < MAXDEVICES; i++) ++ if (!device[i]) { ++ device[i] = this; ++ numDevices++; ++ return; ++ } ++ esyslog("ERROR: too many devices!"); + } + + cDevice::~cDevice() + { ++ numDevices--; ++ device[DeviceNumber()] = NULL; + Detach(player); + DetachAllReceivers(); + delete liveSubtitle; +@@ -272,7 +277,7 @@ + { + for (time_t t0 = time(NULL); time(NULL) - t0 < Timeout; ) { + bool ready = true; +- for (int i = 0; i < numDevices; i++) { ++ for (int i = 0; i < MAXDEVICES; i++) { + if (device[i] && !device[i]->Ready()) { + ready = false; + cCondWait::SleepMs(100); +@@ -304,7 +309,7 @@ + + int cDevice::DeviceNumber(void) const + { +- for (int i = 0; i < numDevices; i++) { ++ for (int i = 0; i < MAXDEVICES; i++) { + if (device[i] == this) + return i; + } +@@ -318,7 +323,7 @@ + bool cDevice::SetPrimaryDevice(int n) + { + n--; +- if (0 <= n && n < numDevices && device[n]) { ++ if (0 <= n && n < MAXDEVICES && device[n]) { + isyslog("setting primary device to %d", n + 1); + if (primaryDevice) + primaryDevice->MakePrimaryDevice(false); +@@ -352,7 +357,7 @@ + + cDevice *cDevice::GetDevice(int Index) + { +- return (0 <= Index && Index < numDevices) ? device[Index] : NULL; ++ return (0 <= Index && Index < MAXDEVICES) ? device[Index] : NULL; + } + + cDevice *cDevice::GetDevice(const cChannel *Channel, int Priority, bool LiveView) +@@ -388,8 +393,8 @@ + for (int j = 0; j < NumCamSlots || !NumUsableSlots; j++) { + if (NumUsableSlots && SlotPriority[j] > MAXPRIORITY) + continue; // there is no CAM available in this slot +- for (int i = 0; i < numDevices; i++) { +- if (device[i] == AvoidDevice) ++ for (int i = 0; i < MAXDEVICES; i++) { ++ if (device[i] == NULL || device[i] == AvoidDevice) + continue; // this device shall be temporarily avoided + if (Channel->Ca() && Channel->Ca() <= CA_DVB_MAX && Channel->Ca() != device[i]->CardIndex() + 1) + continue; // a specific card was requested, but not this one +@@ -463,10 +468,11 @@ + void cDevice::Shutdown(void) + { + primaryDevice = NULL; +- for (int i = 0; i < numDevices; i++) { +- delete device[i]; +- device[i] = NULL; ++ for (int i = 0; i < MAXDEVICES; i++) { ++ if( device[i]) { ++ delete device[i]; + } ++ } + } + + uchar *cDevice::GrabImage(int &Size, bool Jpeg, int Quality, int SizeX, int SizeY) +@@ -703,7 +709,7 @@ + + bool cDevice::ProvidesTransponderExclusively(const cChannel *Channel) const + { +- for (int i = 0; i < numDevices; i++) { ++ for (int i = 0; i < MAXDEVICES; i++) { + if (device[i] && device[i] != this && device[i]->ProvidesTransponder(Channel)) + return false; + } |