summaryrefslogtreecommitdiff
path: root/patches/.svn/text-base/vdr-1.6-device-consistent-destruct.patch.svn-base
diff options
context:
space:
mode:
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-base97
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;
+ }