[mythtv-commits] Ticket #1967: mythbackend crash during start up (upnp)

MythTV mythtv at cvs.mythtv.org
Sun Jun 18 18:18:02 UTC 2006


#1967: mythbackend crash during start up (upnp)
----------------------------------------+-----------------------------------
 Reporter:  jwestfall at surrealistic.net  |       Owner:  ijr 
     Type:  defect                      |      Status:  new 
 Priority:  minor                       |   Milestone:      
Component:  mythtv                      |     Version:  head
 Severity:  medium                      |  
----------------------------------------+-----------------------------------
 Hi

 I am seeing a crash on start up on one of my backends.  I will attach
 gdb/backend.  The issue is related to upnp starting up worker threads.

 In ThreadPool::AddWorkerThread() the following is timing out

 {{{
   if (pThread->WaitForInitialized( 5000 ))
   {
    ...
   }
   else
   {
             // ------------------------------------------------------
             // It's taking longer than 5 seconds to initialize this
 thread....
             // give up on it.
             // (This should never happen)
             // ------------------------------------------------------

             delete pThread;
             pThread = NULL;
    }
 }}}

 Deleting the pThread object while the thread exists causes the crash when
 the thread goes to access it.

 I think I got the timeout tracked down to CEvent::WaitForEvent(timeout)
 missing events/signals.

 I believe the following is happening.

 {{{
       Thread 1 (main thread)                Thread 2 (new worker thread)
 -----------------------------------------------------------------------
 bool CEvent::WaitForEvent(time) {
   if (IsSignaled())
     return( true );
                                           bool CEvent::SetEvent() {
                                             m_bSignaled = true;
                                             m_wait.wakeAll();
                                           }
   return( m_wait.wait( time ) );
 }

 }}}

 The wakeAll() can happen before WaitForEvent() gets to its wait(), causing
 the timeout and thus missing the event/signal.

-- 
Ticket URL: <http://cvs.mythtv.org/trac/ticket/1967>
MythTV <http://www.mythtv.org/>
MythTV


More information about the mythtv-commits mailing list