RE: ERROR: can't set filter (pid=110, tid=02, mask=FF): Device or resource busy

Message ID 431024E5.40404@cadsoft.de
State New
Headers

Commit Message

Klaus Schmidinger Aug. 27, 2005, 8:31 a.m. UTC
  Martin Dauskardt wrote:
>>Have you tested all versions between 1.3.24 and 1.3.30?
>>It would help if we knew which version change exactly causes this.
>>
>>Oh, and please try without any patches or plugins (as far as possible).
> 
> 
> o.k., I will make some tests with 1.3.29 and earlier
> 
> I just made a short test with vdr 1.3.30, to confirm the problem: yes, again
> it took only a few minutes to freeze.
> This time I had started the EPG scan manually befor. With other vdr
> versions, I usually get a black picture at this moment, but it is possible
> to switch back to the channel. With vdr 1.3.30, the picture freezes in a
> funny way: The frozen picture contains of two halfs with the same content.
> Sorry, I can`t describe it better in english.
> (Das Bild besteht aus zwei Halften, von denen beide den gleichen Bildinhalt
> haben)
> 
> I pressed "2" and the ZDF picture appears back. After about a minute, the
> picture freezes and the log shows the "can`t set filter"-error. It seems
> that the problem only appears during an EPG scan.
> 
> Then I set "EPG scan timeout" to 0 ,and now there are no freezes!
> 
> It seems that the other problem I posted (live picture freezes when
> recording starts) does not appear als long as there is no EPG scan running.
> 
> My machine has a Fuji DVB-C with CI-modul (but no alphacrypt inside) and a
> Lorenzen DVB-T card. I use the old DVB HEAD driver for 2.4

Please try the attached patch. I guess it should fix this.

Klaus
  

Patch

--- eitscan.c	2005/08/07 11:29:54	1.27
+++ eitscan.c	2005/08/26 15:37:06
@@ -150,7 +150,7 @@ 
                          if (!Channel->Ca() || Channel->Ca() == Device->DeviceNumber() + 1 || Channel->Ca() >= 0x0100) {
                             if (Device->ProvidesTransponder(Channel)) {
                                if (!Device->Receiving()) {
-                                  bool IsPrimaryDeviceReplaying = Device == cDevice::PrimaryDevice() && Device->Replaying();
+                                  bool IsPrimaryDeviceReplaying = Device == cDevice::PrimaryDevice() && Device->Replaying() && cTransferControl::ReceiverDevice() != cDevice::PrimaryDevice();
                                   if (Device != cDevice::ActualDevice() || (Device->ProvidesTransponderExclusively(Channel) && (IsPrimaryDeviceReplaying || now - lastActivity > Setup.EPGScanTimeout * 3600))) {
                                      if (!IsPrimaryDeviceReplaying && Device == cDevice::ActualDevice() && !currentChannel) {
                                         if (cTransferControl::ReceiverDevice())