From patchwork Fri May 12 03:35:29 2006 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anssi Hannula X-Patchwork-Id: 12304 Received: from pne-smtpout4-sn2.hy.skanova.net ([81.228.8.154]) by www.linuxtv.org with esmtp (Exim 4.50) id 1FeORn-0007ZD-7K for vdr@linuxtv.org; Fri, 12 May 2006 05:36:11 +0200 Received: from mail.onse.fi (80.223.77.223) by pne-smtpout4-sn2.hy.skanova.net (7.2.070) id 444499DE00140017 for vdr@linuxtv.org; Fri, 12 May 2006 05:35:40 +0200 Received: from [10.0.0.4] (kannettava [10.0.0.4]) by mail.onse.fi (Postfix) with ESMTP id E51E946C41F4 for ; Fri, 12 May 2006 06:35:35 +0300 (EEST) Message-ID: <44640281.3030702@gmail.com> Date: Fri, 12 May 2006 06:35:29 +0300 From: Anssi Hannula User-Agent: Mozilla Thunderbird 1.0.6 (Windows/20050716) X-Accept-Language: en-us, en MIME-Version: 1.0 To: VDR Mailing List Subject: Re: [vdr] [PATCH] Priority of transfer-mode should not be -1 References: <4306F832.9030407@cadsoft.de> <4311D492.8040602@gmail.com> <43122CB3.30105@cadsoft.de> <446255A9.2010304@gmail.com> In-Reply-To: <446255A9.2010304@gmail.com> X-BeenThere: vdr@linuxtv.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: VDR Mailing List List-Id: VDR Mailing List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 12 May 2006 03:36:11 -0000 Status: O X-Status: X-Keywords: X-UID: 9416 Anssi Hannula wrote: > The Receiving(bool CheckAny) is modified so that if it is called on the > transfer-moded device, it returns true if receivers are found with > priority < 0 even if CheckAny == false. > bool cDevice::Receiving(bool CheckAny) const > { > + if (this == ActualDevice()) > + CheckAny = true; No, what if primary device is not receiving, but has -1 priority receivers? This reports true then, when it shouldn't. It should be this instead: + if (this == cTransferControl::ReceiverDevice()) + return true; Attached is a revised patch. diff -Nurp -x '*~' vdr-1.4.0/device.c vdr-1.4.0-fix/device.c --- vdr-1.4.0/device.c 2006-04-14 17:34:43.000000000 +0300 +++ vdr-1.4.0-fix/device.c 2006-05-12 06:31:20.000000000 +0300 @@ -627,7 +627,7 @@ eSetChannelResult cDevice::SetChannel(co // use the card that actually can receive it and transfer data from there: if (NeedsTransferMode) { - cDevice *CaDevice = GetDevice(Channel, 0, &NeedsDetachReceivers); + cDevice *CaDevice = GetDevice(Channel, Setup.PrimaryLimit, &NeedsDetachReceivers); if (CaDevice && CanReplay()) { cStatus::MsgChannelSwitch(this, 0); // only report status if we are actually going to switch the channel if (CaDevice->SetChannel(Channel, false) == scrOk) { // calling SetChannel() directly, not SwitchChannel()! @@ -1158,7 +1158,7 @@ int cDevice::Ca(void) const int cDevice::Priority(void) const { - int priority = IsPrimaryDevice() ? Setup.PrimaryLimit - 1 : DEFAULTPRIORITY; + int priority = ActualDevice() == this ? Setup.PrimaryLimit - 1 : DEFAULTPRIORITY; for (int i = 0; i < MAXRECEIVERS; i++) { if (receiver[i]) priority = max(receiver[i]->priority, priority); @@ -1183,6 +1183,8 @@ int cDevice::ProvidesCa(const cChannel * bool cDevice::Receiving(bool CheckAny) const { + if (this == cTransferControl::ReceiverDevice()) + return true; for (int i = 0; i < MAXRECEIVERS; i++) { if (receiver[i] && (CheckAny || receiver[i]->priority >= 0)) // cReceiver with priority < 0 doesn't count return true;