projects
/
pulseview.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Don't join with non-threads. Fixes 323
[pulseview.git]
/
pv
/
data
/
decoderstack.cpp
diff --git
a/pv/data/decoderstack.cpp
b/pv/data/decoderstack.cpp
index 74ad7d362d0b2fe1e93dc31e928202b06689d23c..9707d8d2cb605ddf61361bd48c648c4b48d65714 100644
(file)
--- a/
pv/data/decoderstack.cpp
+++ b/
pv/data/decoderstack.cpp
@@
-67,8
+67,10
@@
DecoderStack::DecoderStack(const srd_decoder *const dec) :
DecoderStack::~DecoderStack()
{
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> >&
}
const std::list< boost::shared_ptr<decode::Decoder> >&
@@
-168,8
+170,10
@@
void DecoderStack::begin_decode()
shared_ptr<pv::view::LogicSignal> logic_signal;
shared_ptr<pv::data::Logic> data;
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();
clear();
@@
-260,8
+264,9
@@
void DecoderStack::decode_proc(shared_ptr<data::Logic> data)
const shared_ptr<pv::data::LogicSnapshot> &snapshot =
snapshots.front();
const int64_t sample_count = snapshot->get_sample_count();
const shared_ptr<pv::data::LogicSnapshot> &snapshot =
snapshots.front();
const int64_t sample_count = snapshot->get_sample_count();
+ const unsigned int unit_size = snapshot->unit_size();
const unsigned int chunk_sample_count =
const unsigned int chunk_sample_count =
- DecodeChunkLength /
snapshot->unit_size()
;
+ DecodeChunkLength /
unit_size
;
// Create the session
srd_session_new(&session);
// Create the session
srd_session_new(&session);
@@
-270,7
+275,7
@@
void DecoderStack::decode_proc(shared_ptr<data::Logic> data)
// Create the decoders
BOOST_FOREACH(const shared_ptr<decode::Decoder> &dec, _stack)
{
// Create the decoders
BOOST_FOREACH(const shared_ptr<decode::Decoder> &dec, _stack)
{
- srd_decoder_inst *const di = dec->create_decoder_inst(session);
+ srd_decoder_inst *const di = dec->create_decoder_inst(session
, unit_size
);
if (!di)
{
if (!di)
{
@@
-305,8
+310,8
@@
void DecoderStack::decode_proc(shared_ptr<data::Logic> data)
i + chunk_sample_count, sample_count);
snapshot->get_samples(chunk, i, chunk_end);
i + chunk_sample_count, sample_count);
snapshot->get_samples(chunk, i, chunk_end);
- if (srd_session_send(session, i, i + sample_count,
-
chunk, chunk_end - i
) != SRD_OK) {
+ if (srd_session_send(session, i, i + sample_count,
chunk,
+
(chunk_end - i) * unit_size
) != SRD_OK) {
_error_message = tr("Decoder reported an error");
break;
}
_error_message = tr("Decoder reported an error");
break;
}