[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdebase/runtime/phonon/xine
From:       Matthias Kretz <kretz () kde ! org>
Date:       2007-09-26 22:00:31
Message-ID: 1190844031.304879.17597.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 717453 by mkretz:

fix deadlock when the frontend AbstractMediaStream never calls setStreamSize but endOfData

 M  +10 -2     bytestream.cpp  


--- trunk/KDE/kdebase/runtime/phonon/xine/bytestream.cpp #717452:717453
@@ -393,12 +393,20 @@
 void ByteStream::endOfData()
 {
     PXINE_DEBUG;
-    QMutexLocker lock(&m_mutex);
+
+    m_mutex.lock();
+    m_seekMutex.lock();
+    m_streamSizeMutex.lock();
     m_eod = true;
     // don't reset the XineStream because many demuxers hit eod while trying to find the format of
     // the data
     // stream().setMrl(mrl());
+    m_seekWaitCondition.wakeAll();
+    m_seekMutex.unlock();
     m_waitingForData.wakeAll();
+    m_mutex.unlock();
+    m_waitForStreamSize.wakeAll();
+    m_streamSizeMutex.unlock();
 }
 
 void ByteStream::setStreamSeekable(bool seekable)
@@ -464,7 +472,7 @@
     if (m_streamSize == 0) {
         // stream size has not been set yet
         QMutexLocker lock(&m_streamSizeMutex);
-        if (m_streamSize == 0) {
+        if (m_streamSize == 0 && !m_eod) {
             m_waitForStreamSize.wait(&m_streamSizeMutex);
         }
     }
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic