[mythtv] Ticket #9745: Mythbackend deadlock with slave backend connected

Douglas Paul doug at elemental.ath.cx
Mon Apr 25 18:10:52 UTC 2011


On Fri, Apr 22, 2011 at 04:22:56PM -0400, Tom Lichti wrote:
> As I mentioned in the ticket, and in the -users thread, I have applied
> that change and it still deadlocks consistently. Gavin asked that I
> try it, and if it still didn't work, to open a new ticket, which I
> did.

I ran into something like this issue as well, and the following patch fixes
it for me:

diff --git a/mythtv/programs/mythbackend/autoexpire.cpp b/mythtv/programs/mythbackend/autoexpire.cpp
index 04fb8b3..d65c356 100644
--- a/mythtv/programs/mythbackend/autoexpire.cpp
+++ b/mythtv/programs/mythbackend/autoexpire.cpp
@@ -76,7 +76,8 @@ AutoExpire::AutoExpire(QMap<int, EncoderLink *> *tvList) :
     desired_freq(15),
     expire_thread_run(true),
     main_server(NULL),
-    update_pending(false)
+    update_pending(false),
+    update_thread(NULL)
 {
     expire_thread->start();
     gCoreContext->addListener(this);
@@ -91,7 +92,8 @@ AutoExpire::AutoExpire() :
     desired_freq(15),
     expire_thread_run(false),
     main_server(NULL),
-    update_pending(false)
+    update_pending(false),
+    update_thread(NULL)
 {
 }
 

Also, while debugging this, I ran into a deadlock situation when using
 --verbose all, and this change fixes it for me as well :

diff --git a/mythtv/libs/libmythbase/mythverbose.h b/mythtv/libs/libmythbase/mythverbose.h
index 6c90127..d57924a 100644
--- a/mythtv/libs/libmythbase/mythverbose.h
+++ b/mythtv/libs/libmythbase/mythverbose.h
@@ -137,9 +137,10 @@ extern MBASE_PUBLIC unsigned int print_verbose_messages;
             {                                                                        \
                 QDateTime dtmp = QDateTime::currentDateTime();                       \
                 QString dtime = dtmp.toString("yyyy-MM-dd hh:mm:ss.zzz");            \
+                QString dargs(__VA_ARGS__);                                          \
                 verbose_mutex.lock();                                                \
                 std::cout << dtime.toLocal8Bit().constData() << " "                  \
-                     << QString(__VA_ARGS__).toLocal8Bit().constData() << std::endl; \
+                     << dargs.toLocal8Bit().constData() << std::endl;                \
                 verbose_mutex.unlock();                                              \
             }                                                                        \
         } while (0)

I can attach these to a ticket if needed.

-- 
Douglas Paul




More information about the mythtv-dev mailing list