﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	severity	resolution	keywords	cc	mlocked
7066	LiveTV hangs occasionaly when changing channels	anonymous	Janne Grunau	"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...

"	defect	closed	critical	0.22	MythTV - DVB	head	high	invalid			0
