[mythtv-commits] Ticket #9263: Cut list editor stuck in endless wait loop

MythTV mythtv at cvs.mythtv.org
Fri Nov 19 19:25:04 UTC 2010


#9263: Cut list editor stuck in endless wait loop
-----------------------------------------+----------------------------------
     Reporter:  chemobejk@…              |       Owner:  janne                
         Type:  Bug Report               |      Status:  new                  
     Priority:  major                    |   Milestone:                       
    Component:  MythTV - Video Playback  |     Version:  0.24                 
     Severity:  high                     |    Keywords:  cut list editor stuck
Ticket locked:  0                        |  
-----------------------------------------+----------------------------------
 I'm not sure if this is related to ticket #9122. But that ticket is closed
 and I still have issues with the cut list editor which gets stuck and
 blocks the whole frontend. I've now tracked it down with gdb to this
 location in the code:
 {{{
 #0  MythPlayer::WaitForSeek (this=0xabe8bc8, frame=3794,
 override_seeks=false,
     seeks_wanted=false) at mythplayer.cpp:3451
 #1  0x0416ddfc in MythPlayer::DoFastForward (this=0xabe8bc8, frames=3794,
     override_seeks=true, seeks_wanted=true) at mythplayer.cpp:3404
 #2  0x0416f54c in MythPlayer::HandleArbSeek (this=0xabe8bc8, right=true)
     at mythplayer.cpp:3719
 #3  0x0417f4e8 in MythPlayer::HandleProgramEditorActions (this=0xabe8bc8,
     actions=..., frame=1) at mythplayer.cpp:3595
 #4  0x0414a60e in TV::ProcessKeypress (this=0xab4ba50, actx=0xae132f0,
     e=0xbc75c98) at tv_play.cpp:3651
 }}}

 i.e. the frontend is stuck in this endless loop, because decoderSeek never
 is set to -1:
 {{{
     decoderSeekLock.lock();
     decoderSeek = frame;
     decoderSeekLock.unlock();
     ...
     while (decoderSeek >= 0)
     {
         usleep(1000);
     ...
     }
 }}}

 As far as I can see decoderSeek is only updated in
 MythPlayer::DecoderLoop():
 {{{
         if (decoderSeek >= 0)
         {
             decoderSeekLock.lock();
             ...
             decoderSeek = -1;
             decoderSeekLock.unlock();
         }
 }}}

 The code looks correct to me, i.e. when WaitForSeek() sets decoderSeek >=
 0 the next run of the DecoderLoop() should set it to -1. I probably don't
 have the necessary overview to understand the different threads. Maybe the
 DecoderThread is disabled and therefore the code in the loop isn't
 executed under certain conditions?

 In the debugger I programmed a breakpoint inside the loop that waits until
 count has reached 500 and then forces decoderSeek to -1 to break the loop.
 With this in place the display isn't correctly updated when the error
 occurs, but now the cut list editor/frontend recovers from it so that I
 can at least continue to use it.

 The recordings I'm trying to edit are MPEG2 recordings taken from a DVB-C
 card.


 If you need more information, please provide pointers how I can collect it
 for you.

-- 
Ticket URL: <http://svn.mythtv.org/trac/ticket/9263>
MythTV <http://www.mythtv.org/>
MythTV Media Center


More information about the mythtv-commits mailing list