[PATCH] Hang when moving between editing marks

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Reinhard Nissl wrote:
> Hi,
> 
> Klaus Schmidinger wrote:
> 
>>>>> The attached patch should fix a hang (livelock) which can occur when
>>>>> moving between editing marks. Blame Timothy Baldwin if it doesn't
>>>>> work -
>>>>> he suggested it ;-)
>>>
>>>
>>>> Under which conditions do these lockups happen?
>>>> Which output device is in use (FF DVB card or some software player)?
>>>
>>>
>>> It's happened here: budget card, xine-lib.
>>
>>
>> Ah, as I suspected ;-)
>>
>> Could it be that the xine player doesn't implement
>> cDevice::Poll() the way it is supposed to?
>> My guess would be that in case of a still picture the xine player's
>> Poll() function returns immediately instead of waiting for the
>> given timeout. That would explain why everything appears to lock up.
> 
> 
> We've already discussed vdr-xine's Poll() implementation in this thread
> (~ 26.11.2004):
> 
> vdr-1.3.15: high CPU load when showing still picture while editing cut
> marks
> 
> At that time, you've decided to put Sleep() in the loop back again. But
> you've put it at a different location than it was in the previous versions.
> 
> This can still lead to high cpu load when someone pauses a recording
> almost at the end. At that time, VDR has already read and sent the last
> packet to vdr-xine and is now just waiting for vdr-xine to report (via
> DeviceFlush()) that xine has played the last frame of the given data.
> 
> The attached patch fixes this issue by exchanging two "if" blocks, which
> also moves the Sleep() almost to the position where is was located in
> earlier VDR versions.
> 
> This patch is also part of my other dvbplayer-2/3 patch, but I've
> extracted it to get it included earlier than the other things of the
> original patches.
> 
> But maybe it would be even better to move this Sleep() out of the locked
> area.
> 
>> Could you please verify this?
> 
> 
> Well, as written in the above mentioned thread, after sending the still
> image data to xine, the fifo gets empty and therefore Poll() returns
> immediately, as data can be transfered to xine.
> 
> But I do not see any special behaviour for FF cards in this code:
> 
>   bool cDvbDevice::Poll(cPoller &Poller, int TimeoutMs)
>   {
>     Poller.Add((playMode == pmAudioOnly
>       || playMode == pmAudioOnlyBlack) ? fd_audio : fd_video, true);
>     return Poller.Poll(TimeoutMs);
>   }
> 
> Is it that FF cards behave like that when a still image is shown?
> But as a Clear() is happening before sending the still image, I'd expect
> even a FF card to immediately return here in Poll().
> 
>>>> I don't really see what difference this sched_yield() would make, so
>>>> I'd
>>>> like to understand this before simply throwing it in...
>>>
>>>
>>> Quoting from the mail which described the patch:
>>>
>>> | It's livelock!
>>>
>>> | The thread which executes cDvbPlayer::Action(void) (in dvbplayer.c)
>>> locks
>>> | the cDvbPlayer object most of the time when an editing mark is
>>> first jumped
>>> | to. The symptoms are cured by adding a call to sched_yield() before
>>> | LOCK_THREAD in cDvbPlayer::Action(void).
> 
> 
> Well, I do not have this sched_yield() in my code version, but maybe I
> do not see any effects of missig it as my development PC has an
> HyperThreading processor. When the unlock happens, the other waiting
> thread might immediately be able to enter the critical section.
> 

After comparing rev.3 and rev.4 of this patch, I noticed that you removed all
the fixIFrame functions.  Fixing the IFrames is no longer an issue?

Thanks for all your great patches..

Best Regards,
C.Y.M.


[Index of Archives]     [Linux Media]     [Asterisk]     [DCCP]     [Netdev]     [Xorg]     [Util Linux NG]     [Xfree86]     [Big List of Linux Books]     [Fedora Users]     [Fedora Women]     [ALSA Devel]     [Linux USB]

  Powered by Linux