[prev in list] [next in list] [prev in thread] [next in thread]
List: mythtv-dev
Subject: Re: [mythtv] mythtv blocking/crashing fix
From: Daniel Thor Kristjansson <danielk () cat ! nyu ! edu>
Date: 2004-01-30 20:09:50
Message-ID: Pine.SOL.4.58.0401301509020.12376 () graphics ! cat ! nyu ! edu
[Download RAW message or body]
Sure, see attached.
-- Daniel
<< When truth is outlawed; only outlaws will tell the truth. >> - RLiegh
On Fri, 30 Jan 2004, Isaac Richards wrote:
]On Friday 30 January 2004 12:54 am, Daniel Thor Kristjansson wrote:
]> The frontend is blocking forever when I tune into an off-air hdtv
]> channel. This patch exits mythtv after about 20 seconds of no input and
]> returns to mythtvfrontend.
]>
]> I also have a fix that makes the httv backend a little more robust but
]> I'm still looking at how to tune it.
]>
]> Please try this if you have a hdtv card, or you've had this problem
]> with another capture card.
]>
]> Also, if someone familiar with the RingBuffer and tv_play has some time,
]> I'd like it if you look at this, this my first attempt hacking Myth and
]> I may have missed something.
]
]Mind resending it as a unified diff (diff -u)?
]
]Isaac
]_______________________________________________
]mythtv-dev mailing list
]mythtv-dev@mythtv.org
]http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-dev
]
["diffu.patch" (TEXT/PLAIN)]
--- mythtv/libs/libmythtv/RingBuffer.cpp 2004-01-28 00:04:37.000000000 -0500
+++ mythtv-new/libs/libmythtv/RingBuffer.cpp 2004-01-30 00:21:07.000000000 -0500
@@ -812,13 +812,23 @@
int avail = ReadBufAvail();
+ int readErr=0;
while (avail < count && !stopreads)
{
availWaitMutex.lock();
wanttoread = count;
- if (!availWait.wait(&availWaitMutex, 2000))
+ if (!availWait.wait(&availWaitMutex, 2000)) {
cerr << "Waited 2 seconds for data to become available, waiting "
"again...\n";
+ readErr++;
+ if (readErr>5) {
+ cerr << "Waited 10 seconds for data to become available, aborting" << endl;
+ wanttoread=0;
+ stopreads=true;
+ availWaitMutex.unlock();
+ return 0;
+ }
+ }
wanttoread = 0;
availWaitMutex.unlock();
--- mythtv/libs/libmythtv/tv_play.cpp 2004-01-28 15:23:17.000000000 -0500
+++ mythtv-new/libs/libmythtv/tv_play.cpp 2004-01-30 00:25:19.000000000 -0500
@@ -603,6 +603,15 @@
{
VERBOSE(VB_GENERAL, QString("Changing from %1 to %2")
.arg(origname).arg(statename));
+ if (!activenvp->IsDecoderThreadAlive() && kState_None!=nextState) {
+ cerr<<"panic: decoder not alive and state not None"<<endl;
+ if (kState_WatchingLiveTV==nextState) {
+ cerr<<"stopping recorder"<<endl;
+ StopPlayerAndRecorder(false, true);
+ recorder=false;
+ }
+ tmpInternalState=kState_None;
+ }
}
internalState = tmpInternalState;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic