aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/qmmp/outputwriter.cpp2
-rw-r--r--src/qmmp/qmmpaudioengine.cpp9
2 files changed, 9 insertions, 2 deletions
diff --git a/src/qmmp/outputwriter.cpp b/src/qmmp/outputwriter.cpp
index 21074f57a..82b5924e9 100644
--- a/src/qmmp/outputwriter.cpp
+++ b/src/qmmp/outputwriter.cpp
@@ -296,8 +296,8 @@ void OutputWriter::run()
while (!done && (recycler()->empty() || m_pause))
{
- mutex()->unlock();
recycler()->cond()->wakeOne();
+ mutex()->unlock();
recycler()->cond()->wait(recycler()->mutex());
mutex()->lock ();
done = m_userStop || m_finish;
diff --git a/src/qmmp/qmmpaudioengine.cpp b/src/qmmp/qmmpaudioengine.cpp
index 71f2fbc7c..0b13c0ab0 100644
--- a/src/qmmp/qmmpaudioengine.cpp
+++ b/src/qmmp/qmmpaudioengine.cpp
@@ -269,7 +269,9 @@ void QmmpAudioEngine::stop()
// wake up threads
if (m_output)
{
+ m_output->mutex()->lock();
m_output->recycler()->cond()->wakeAll();
+ m_output->mutex()->unlock();
if(m_output->isRunning())
m_output->wait();
delete m_output;
@@ -480,7 +482,12 @@ void QmmpAudioEngine::run()
m_next = false;
if (m_finish)
finish();
- m_output->recycler()->cond()->wakeAll();
+ if(m_output)
+ {
+ m_output->mutex()->lock();
+ m_output->recycler()->cond()->wakeAll();
+ m_output->mutex()->unlock();
+ }
mutex()->unlock();
}