]> sigrok.org Git - pulseview.git/blobdiff - pv/session.cpp
Fix #792 by making sure we don't request samples that don't exist
[pulseview.git] / pv / session.cpp
index 9fd8fb3eb9b5bdf6a1c03cf5f457e9b5113de493..4bc510e9fa538d5eb3a848fde39ea4604520512d 100644 (file)
@@ -138,6 +138,22 @@ void Session::set_device(shared_ptr<devices::Device> device)
        if (device_)
                device_->close();
 
+       device_.reset();
+
+       // Remove all traces
+       signals_.clear();
+       cur_logic_segment_.reset();
+
+       for (auto entry : cur_analog_segments_) {
+               shared_ptr<sigrok::Channel>(entry.first).reset();
+               shared_ptr<data::AnalogSegment>(entry.second).reset();
+       }
+
+       logic_data_.reset();
+       decode_traces_.clear();
+
+       signals_changed();
+
        device_ = std::move(device);
        device_->open();
        device_->session()->add_datafeed_callback([=]
@@ -145,8 +161,6 @@ void Session::set_device(shared_ptr<devices::Device> device)
                        data_feed_in(device, packet);
                });
 
-       decode_traces_.clear();
-
        update_signals();
        device_selected();
 }
@@ -333,7 +347,11 @@ void Session::set_capture_state(capture_state state)
 
 void Session::update_signals()
 {
-       assert(device_);
+       if (!device_) {
+               signals_.clear();
+               logic_data_.reset();
+               return;
+       }
 
        lock_guard<recursive_mutex> lock(data_mutex_);