X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fdata%2Fdecodesignal.cpp;h=5acf9eec634380533a2cb1c0bfeceb767cec6f7b;hp=1d9f3c8ffb0dababec91fd579de2eef4b17e22e7;hb=8ebf8079b43ba0aebe9bc5d4d27049b4a91aa22d;hpb=419ec4e11ee29e27566d1c0c17741fcad85dbdf6 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()) {