diff options
author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2017-03-25 18:21:12 +0100 |
---|---|---|
committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2017-03-25 18:21:12 +0100 |
commit | 887d270a8327da46a89d8e5375f172db778f0ff9 (patch) | |
tree | 449d2f0c39ea121490e013d9a9ab221ccdcdd5a2 /src/ModPlugin.cpp | |
parent | f9e0a5c8eef355e14e276a7456ca020a11f24924 (diff) | |
download | dabmod-887d270a8327da46a89d8e5375f172db778f0ff9.tar.gz dabmod-887d270a8327da46a89d8e5375f172db778f0ff9.tar.bz2 dabmod-887d270a8327da46a89d8e5375f172db778f0ff9.zip |
Fix race condition for PipelinedModCodec thread startup
The thread could start before the vtable containing the subclass function is ready, leading
to a crash because the thread calls a pure virtual function.
Diffstat (limited to 'src/ModPlugin.cpp')
-rw-r--r-- | src/ModPlugin.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/ModPlugin.cpp b/src/ModPlugin.cpp index 34ad797..74db5f9 100644 --- a/src/ModPlugin.cpp +++ b/src/ModPlugin.cpp @@ -74,10 +74,11 @@ int ModOutput::process( PipelinedModCodec::PipelinedModCodec() : ModCodec(), + m_number_of_runs(0), m_input_queue(), m_output_queue(), - m_number_of_runs(0), - m_thread(&PipelinedModCodec::process_thread, this) + m_running(false), + m_thread() { } @@ -89,6 +90,11 @@ PipelinedModCodec::~PipelinedModCodec() } } +void PipelinedModCodec::start_pipeline_thread() +{ + m_thread = std::thread(&PipelinedModCodec::process_thread, this); +} + int PipelinedModCodec::process(Buffer* dataIn, Buffer* dataOut) { if (!m_running) { |