Added a reference to the SigSession in DecoderStack
[pulseview.git] / pv / data / decoderstack.cpp
index 9b02f9e929cc41b9ca75709acc27f3793745c333..2c68ef80d2a58e1b06531d4dbafd7d1f32ef14e2 100644 (file)
@@ -58,7 +58,9 @@ const int64_t DecoderStack::DecodeChunkLength = 4096;
 
 mutex DecoderStack::_global_decode_mutex;
 
-DecoderStack::DecoderStack(const srd_decoder *const dec) :
+DecoderStack::DecoderStack(pv::SigSession &session,
+       const srd_decoder *const dec) :
+       _session(session),
        _samples_decoded(0)
 {
        _stack.push_back(shared_ptr<decode::Decoder>(
@@ -67,8 +69,10 @@ DecoderStack::DecoderStack(const srd_decoder *const dec) :
 
 DecoderStack::~DecoderStack()
 {
-       _decode_thread.interrupt();
-       _decode_thread.join();
+       if (_decode_thread.joinable()) {
+               _decode_thread.interrupt();
+               _decode_thread.join();
+       }
 }
 
 const std::list< boost::shared_ptr<decode::Decoder> >&
@@ -168,8 +172,10 @@ void DecoderStack::begin_decode()
        shared_ptr<pv::view::LogicSignal> logic_signal;
        shared_ptr<pv::data::Logic> data;
 
-       _decode_thread.interrupt();
-       _decode_thread.join();
+       if (_decode_thread.joinable()) {
+               _decode_thread.interrupt();
+               _decode_thread.join();
+       }
 
        clear();