From 887d270a8327da46a89d8e5375f172db778f0ff9 Mon Sep 17 00:00:00 2001 From: "Matthias P. Braendli" Date: Sat, 25 Mar 2017 18:21:12 +0100 Subject: 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. --- src/ModPlugin.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'src/ModPlugin.cpp') 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) { -- cgit v1.2.3