From: Soeren Apel Date: Sat, 1 Jul 2017 21:37:55 +0000 (+0200) Subject: DecodeSignal: Improve robustness X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=commitdiff_plain;h=8ebf8079b43ba0aebe9bc5d4d27049b4a91aa22d DecodeSignal: Improve robustness --- diff --git a/pv/data/decodesignal.cpp b/pv/data/decodesignal.cpp index 1d9f3c8f..5acf9eec 100644 --- a/pv/data/decodesignal.cpp +++ b/pv/data/decodesignal.cpp @@ -749,12 +749,24 @@ void DecodeSignal::query_input_metadata() // TODO Currently we assume all channels have the same sample rate // and start time bool samplerate_valid = false; + data::DecodeChannel *any_channel; + shared_ptr logic_data; - auto any_channel = find_if(channels_.begin(), channels_.end(), - [](data::DecodeChannel ch) { return ch.assigned_signal; }); + do { + any_channel = &(*find_if(channels_.begin(), channels_.end(), + [](data::DecodeChannel ch) { return ch.assigned_signal; })); + + logic_data = any_channel->assigned_signal->logic_data(); + + if (!logic_data) { + // Wait until input data is available or an interrupt was requested + unique_lock input_wait_lock(input_mutex_); + decode_input_cond_.wait(input_wait_lock); + } + } while (!logic_data && !decode_interrupt_); - shared_ptr logic_data = - any_channel->assigned_signal->logic_data(); + if (decode_interrupt_) + return; do { if (!logic_data->logic_segments().empty()) {