From b54ec4770a21a61e7332490443931f49660d2ba0 Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Tue, 28 May 2013 11:47:37 +0000 Subject: fixed race condition git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@3486 90c681e8-e032-0410-971d-27865f9a5e38 --- src/qmmp/outputwriter.cpp | 2 +- src/qmmp/qmmpaudioengine.cpp | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) (limited to 'src') 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(); } -- cgit v1.2.3-13-gbd6f