projects
/
pulseview.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix #181 by changing the global decode lock into an SRD lock
[pulseview.git]
/
pv
/
data
/
decoderstack.cpp
diff --git
a/pv/data/decoderstack.cpp
b/pv/data/decoderstack.cpp
index 51d4bae0483ec4ca2b1fb74abae54738f680bd0d..59354735d1e328ee6cdd8d23a717ec7763f6fce6 100644
(file)
--- a/
pv/data/decoderstack.cpp
+++ b/
pv/data/decoderstack.cpp
@@
-57,7
+57,7
@@
const double DecoderStack::DecodeThreshold = 0.2;
const int64_t DecoderStack::DecodeChunkLength = 4096;
const unsigned int DecoderStack::DecodeNotifyPeriod = 65536;
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) :
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) {
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);
const int64_t chunk_end = min(
i + chunk_sample_count, sample_count);
@@
-344,6
+343,9
@@
void DecoderStack::decode_proc()
assert(segment_);
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);
// Create the session
srd_session_new(&session);
assert(session);