]> sigrok.org Git - pulseview.git/blobdiff - pv/data/decoderstack.cpp
Fix #181 by changing the global decode lock into an SRD lock
[pulseview.git] / pv / data / decoderstack.cpp
index 51d4bae0483ec4ca2b1fb74abae54738f680bd0d..59354735d1e328ee6cdd8d23a717ec7763f6fce6 100644 (file)
@@ -57,7 +57,7 @@ const double DecoderStack::DecodeThreshold = 0.2;
 const int64_t DecoderStack::DecodeChunkLength = 4096;
 const unsigned int DecoderStack::DecodeNotifyPeriod = 65536;
 
-mutex DecoderStack::global_decode_mutex_;
+mutex DecoderStack::global_srd_mutex_;
 
 DecoderStack::DecoderStack(pv::Session &session,
        const srd_decoder *const dec) :
@@ -312,7 +312,6 @@ void DecoderStack::decode_data(
 
        for (int64_t i = 0; !interrupt_ && i < sample_count;
                        i += chunk_sample_count) {
-               lock_guard<mutex> decode_lock(global_decode_mutex_);
 
                const int64_t chunk_end = min(
                        i + chunk_sample_count, sample_count);
@@ -344,6 +343,9 @@ void DecoderStack::decode_proc()
 
        assert(segment_);
 
+       // Prevent any other decode threads from accessing libsigrokdecode
+       lock_guard<mutex> srd_lock(global_srd_mutex_);
+
        // Create the session
        srd_session_new(&session);
        assert(session);