DecodeSignal: Fix restarting the decode after reloading file
[pulseview.git] / pv / data / decodesignal.cpp
index 339c85dd01dd0305879bce1dc88d3fde6d8ec6e3..37956889e8554624139a26aebd74c90f484f750d 100644 (file)
@@ -265,11 +265,16 @@ void DecodeSignal::auto_assign_signals()
                if (ch.assigned_signal)
                        continue;
 
-               for (shared_ptr<data::SignalBase> s : session_.signalbases())
-                       if (s->logic_data() && (ch.name.toLower().contains(s->name().toLower()))) {
+               for (shared_ptr<data::SignalBase> s : session_.signalbases()) {
+                       const QString ch_name = ch.name.toLower();
+                       const QString s_name = s->name().toLower();
+
+                       if (s->logic_data() &&
+                               ((ch_name.contains(s_name)) || (s_name.contains(ch_name)))) {
                                ch.assigned_signal = s.get();
                                new_assignment = true;
                        }
+               }
        }
 
        if (new_assignment) {
@@ -600,12 +605,12 @@ void DecodeSignal::logic_mux_proc()
                        } while (processed_samples < samples_to_process);
                }
 
-               if (session_.get_capture_state() != Session::Stopped) {
+               if (samples_to_process == 0) {
                        // Wait for more input
                        unique_lock<mutex> logic_mux_lock(logic_mux_mutex_);
                        logic_mux_cond_.wait(logic_mux_lock);
                }
-       } while ((session_.get_capture_state() != Session::Stopped) && !logic_mux_interrupt_);
+       } while (!logic_mux_interrupt_);
 
        // No more input data and session is stopped, let the decode thread
        // process any pending data, terminate and release the global SRD mutex
@@ -638,9 +643,11 @@ void DecodeSignal::query_input_metadata()
                                samplerate_valid = true;
                }
 
-               // Wait until input data is available or an interrupt was requested
-               unique_lock<mutex> input_wait_lock(input_mutex_);
-               decode_input_cond_.wait(input_wait_lock);
+               if (!samplerate_valid) {
+                       // Wait until input data is available or an interrupt was requested
+                       unique_lock<mutex> input_wait_lock(input_mutex_);
+                       decode_input_cond_.wait(input_wait_lock);
+               }
        } while (!samplerate_valid && !decode_interrupt_);
 }