[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