Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mpc-hc/LAVFilters.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHendrik Leppkes <h.leppkes@gmail.com>2013-11-07 01:42:07 +0400
committerHendrik Leppkes <h.leppkes@gmail.com>2013-11-07 02:11:21 +0400
commitaf3c29e6b8e8dd7d578b0197bffdba7474e137d1 (patch)
tree8b5b396b4da6ce7f28825bb98a77838da51dfccd /demuxer
parentdecc7bc5f852944682658d1fdc1456c57dc1ab31 (diff)
Avoid a race condition between seeking and stopping.
Diffstat (limited to 'demuxer')
-rw-r--r--demuxer/LAVSplitter/LAVSplitter.cpp4
-rw-r--r--demuxer/LAVSplitter/LAVSplitter.h1
2 files changed, 5 insertions, 0 deletions
diff --git a/demuxer/LAVSplitter/LAVSplitter.cpp b/demuxer/LAVSplitter/LAVSplitter.cpp
index f1684528..0902da76 100644
--- a/demuxer/LAVSplitter/LAVSplitter.cpp
+++ b/demuxer/LAVSplitter/LAVSplitter.cpp
@@ -705,6 +705,8 @@ DWORD CLAVSplitter::ThreadProc()
return 0;
}
+ m_csPlaybackInit.Lock();
+
m_rtStart = m_rtNewStart;
m_rtStop = m_rtNewStop;
@@ -730,6 +732,7 @@ DWORD CLAVSplitter::ThreadProc()
m_bDiscontinuitySent.clear();
m_bPlaybackStarted = TRUE;
+ m_csPlaybackInit.Unlock();
HRESULT hr = S_OK;
while(SUCCEEDED(hr) && !CheckRequest(&cmd)) {
@@ -862,6 +865,7 @@ STDMETHODIMP_(CMediaType *) CLAVSplitter::GetOutputMediatype(int stream)
STDMETHODIMP CLAVSplitter::Stop()
{
CAutoLock cAutoLock(this);
+ CAutoLock cPlaybackLock(&m_csPlaybackInit);
// Ask network operations to exit
if (m_pDemuxer)
diff --git a/demuxer/LAVSplitter/LAVSplitter.h b/demuxer/LAVSplitter/LAVSplitter.h
index dba1f72c..a7846c3d 100644
--- a/demuxer/LAVSplitter/LAVSplitter.h
+++ b/demuxer/LAVSplitter/LAVSplitter.h
@@ -232,6 +232,7 @@ protected:
private:
CCritSec m_csPins;
+ CCritSec m_csPlaybackInit;
std::vector<CLAVOutputPin *> m_pPins;
std::vector<CLAVOutputPin *> m_pActivePins;
std::vector<CLAVOutputPin *> m_pRetiredPins;