aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2013-05-28 11:47:37 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2013-05-28 11:47:37 +0000
commitb54ec4770a21a61e7332490443931f49660d2ba0 (patch)
tree8b1e00c4a53b8b3f1580c208ef6c65e0c70c8690 /src
parent3a4b1cd8fc0fe0c52b4beb300ced54ddc730e164 (diff)
downloadqmmp-b54ec4770a21a61e7332490443931f49660d2ba0.tar.gz
qmmp-b54ec4770a21a61e7332490443931f49660d2ba0.tar.bz2
qmmp-b54ec4770a21a61e7332490443931f49660d2ba0.zip
fixed race condition
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@3486 90c681e8-e032-0410-971d-27865f9a5e38
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();
}