diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2013-05-28 11:47:37 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2013-05-28 11:47:37 +0000 |
| commit | b54ec4770a21a61e7332490443931f49660d2ba0 (patch) | |
| tree | 8b1e00c4a53b8b3f1580c208ef6c65e0c70c8690 /src | |
| parent | 3a4b1cd8fc0fe0c52b4beb300ced54ddc730e164 (diff) | |
| download | qmmp-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.cpp | 2 | ||||
| -rw-r--r-- | src/qmmp/qmmpaudioengine.cpp | 9 |
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(); } |
