Opened 10 years ago

Closed 10 years ago

#7066 closed defect (invalid)

LiveTV hangs occasionaly when changing channels

Reported by: anonymous Owned by: Janne Grunau
Priority: critical Milestone: 0.22
Component: MythTV - DVB Version: head
Severity: high Keywords:
Cc: Ticket locked: no

Description

Sometimes when changing channels livetv will hang with no other recourse that to kill the frontend and restart.

The frontend shows:

2009-09-15 21:22:41.040 LiveTVChain(live-htpc-2009-09-15T21:22:40): ReloadAll(): Added new recording
2009-09-15 21:22:41.077 We have a playbackURL(myth://1.0.0.10:6543/3434_20090915212240.mpg) & cardtype(DUMMY)
2009-09-15 21:22:41.077 We have a RingBuffer
2009-09-15 21:22:41.078 TV Error: LiveTV not successfully started
2009-09-15 21:22:41.078 TV: HandleStateChange(0) -- end
2009-09-15 21:22:41.078 TV: TeardownPlayer() player ctx 0
2009-09-15 21:22:45.567 TV: StartTV -- process events end
2009-09-15 21:22:45.568 TV: tv->LiveTV() -- begin
2009-09-15 21:22:45.572 TV: tv->LiveTV() -- end
2009-09-15 21:22:45.572 TV: StartTV -- process events begin

I attached a debugger to the FE process and it shows we are stuck on a condvar

(gdb) where
#0  0xffffe424 in __kernel_vsyscall ()
#1  0xb4e70bbb in pthread_cond_timedwait@@GLIBC_2.3.2 () from /lib/libpthread.so.0
#2  0xb4fb7dc4 in QWaitCondition::wait () from /usr/lib/libQtCore.so.4
#3  0xb7800635 in TV::StartTV (tvrec=0x0, startInGuide=false, inPlaylist=false, initByNetworkCommand=false) at tv_play.cpp:331
#4  0x08077632 in startTVNormal () at main.cpp:414
#5  0x08082a9e in TVMenuCallback (data=0x82f70f0, selection=@0xb055a82c) at main.cpp:441
#6  0xb640705a in MythThemedMenu::handleAction (this=0xb055a768, action=@0x85eebc4, password=@0xbf84ab00) at myththemedmenu.cpp:847
#7  0xb6407420 in MythThemedMenu::buttonAction (this=0xb055a768, item=0x85ede70, skipPass=false) at myththemedmenu.cpp:716
#8  0xb649ff93 in MythThemedMenu::qt_metacall (this=0xb055a768, _c=QMetaObject::InvokeMetaMethod, _id=2, _a=0xbf84ac10)
    at moc_myththemedmenu.cpp:73
#9  0xb50be967 in QMetaObject::activate () from /usr/lib/libQtCore.so.4
#10 0xb50bf082 in QMetaObject::activate () from /usr/lib/libQtCore.so.4
#11 0xb64a1fb9 in MythUIButtonList::itemClicked (this=0xb057df30, _t1=0x85ede70) at moc_mythuibuttonlist.cpp:96
#12 0xb6425b30 in MythUIButtonList::keyPressEvent (this=0xb057df30, e=0xbf84b188) at mythuibuttonlist.cpp:867
#13 0xb6407f40 in MythThemedMenu::keyPressEvent (this=0xb055a768, event=0xbf84b188) at myththemedmenu.cpp:211
#14 0xb638b9c2 in MythMainWindow::eventFilter (this=0x835c6a8, e=0xbf84b188) at mythmainwindow.cpp:1399
#15 0xb50a95c1 in QCoreApplicationPrivate::sendThroughObjectEventFilters () from /usr/lib/libQtCore.so.4
#16 0xb56290c3 in QApplicationPrivate::notify_helper () from /usr/lib/libQtGui.so.4
#17 0xb562df8a in QApplication::notify () from /usr/lib/libQtGui.so.4
#18 0xb50a922b in QCoreApplication::notifyInternal () from /usr/lib/libQtCore.so.4
#19 0xb6616b08 in QCoreApplication::sendEvent (receiver=0x835c6a8, event=0xbf84b188) at /usr/include/QtCore/qcoreapplication.h:213
#20 0xb6391e2b in MythMainWindow::customEvent (this=0x835c6a8, ce=0x84a5bc8) at mythmainwindow.cpp:1578
#21 0xb50ba35f in QObject::event () from /usr/lib/libQtCore.so.4
#22 0xb5683445 in QWidget::event () from /usr/lib/libQtGui.so.4
#23 0xb6392fd4 in MythMainWindow::event (this=0x835c6a8, e=0x84a5bc8) at mythmainwindow.cpp:714
#24 0xb56290ec in QApplicationPrivate::notify_helper () from /usr/lib/libQtGui.so.4
#25 0xb562dc17 in QApplication::notify () from /usr/lib/libQtGui.so.4
#26 0xb50a922b in QCoreApplication::notifyInternal () from /usr/lib/libQtCore.so.4
#27 0xb50aa539 in QCoreApplicationPrivate::sendPostedEvents () from /usr/lib/libQtCore.so.4
#28 0xb50aa75d in QCoreApplication::sendPostedEvents () from /usr/lib/libQtCore.so.4
#29 0xb50d50cf in ?? () from /usr/lib/libQtCore.so.4
#30 0xb4eb00f9 in IA__g_main_context_dispatch (context=0x82d0220) at gmain.c:1960
#31 0xb4eb2ee6 in g_main_context_iterate (context=0x82d0220, block=1, dispatch=1, self=0x82ce040) at gmain.c:2591
#32 0xb4eb335c in IA__g_main_context_iteration (context=0x82d0220, may_block=1) at gmain.c:2654
#33 0xb50d54a8 in QEventDispatcherGlib::processEvents () from /usr/lib/libQtCore.so.4
#34 0xb56c2845 in ?? () from /usr/lib/libQtGui.so.4
#35 0xb50a843d in QEventLoop::processEvents () from /usr/lib/libQtCore.so.4
---Type <return> to continue, or q <return> to quit---
#36 0xb50a86ba in QEventLoop::exec () from /usr/lib/libQtCore.so.4
#37 0xb50aa821 in QCoreApplication::exec () from /usr/lib/libQtCore.so.4
#38 0xb5628a37 in QApplication::exec () from /usr/lib/libQtGui.so.4
#39 0x0808068c in main (argc=5, argv=0xbf84c034) at main.cpp:1515
(gdb) 

This (on svn) corresponds to

   312          VERBOSE(VB_PLAYBACK, LOC + "StartTV -- process events begin");
   313          MythTimer st; st.start();
   314          bool is_started = false;
   315          while (true)
   316   	{
   317              qApp->processEvents();
   318
   319              QMutexLocker locker(&tv->stateChangeCondLock);
   320              TVState state   = tv->GetState(0);
   321              bool is_err     = kState_Error == state;
   322              bool is_none    = kState_None  == state;
   323              is_started = is_started ||
   324          	(st.elapsed() > (int) TV::kEndOfPlaybackFirstCheckTimer) ||
   325                  (!is_none && !is_err && kState_ChangingState != state);
   326              if (is_err || (is_none && is_started))
   327                	break;
   328
   329              // timeout needs to be low enough to process keyboard input
   330              unsigned long timeout = 20; // milliseconds
>>>331              tv->stateChangeCond.wait(&tv->stateChangeCondLock, timeout);
   332   	}
   333          VERBOSE(VB_PLAYBACK, LOC + "StartTV -- process events end");
   334

We never come out of this wait...

Change History (2)

comment:1 Changed 10 years ago by dm66@…

Forgot to add my email address

comment:2 Changed 10 years ago by danielk

Resolution: invalid
Status: newclosed

This is missing a full backtrace.. but if the error is where indicated it appears to be in the Qt libs, or a lower level library, since we're just asking it to wait up to 20 milliseconds and no longer.

Note: See TracTickets for help on using tickets.