projects
/
pulseview.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Session: Don't crash when session.device_ is empty
[pulseview.git]
/
pv
/
session.cpp
diff --git
a/pv/session.cpp
b/pv/session.cpp
index c885d37aaeea5edf3cd385712b227b95d55df105..ebef90cbb6590fb9961fad97f73047e56e8acc79 100644
(file)
--- a/
pv/session.cpp
+++ b/
pv/session.cpp
@@
-138,6
+138,13
@@
void Session::set_device(shared_ptr<devices::Device> device)
if (device_)
device_->close();
if (device_)
device_->close();
+ device_.reset();
+
+ // Remove all traces
+ signals_.clear();
+ decode_traces_.clear();
+ signals_changed();
+
device_ = std::move(device);
device_->open();
device_->session()->add_datafeed_callback([=]
device_ = std::move(device);
device_->open();
device_->session()->add_datafeed_callback([=]
@@
-145,8
+152,6
@@
void Session::set_device(shared_ptr<devices::Device> device)
data_feed_in(device, packet);
});
data_feed_in(device, packet);
});
- decode_traces_.clear();
-
update_signals();
device_selected();
}
update_signals();
device_selected();
}
@@
-333,7
+338,11
@@
void Session::set_capture_state(capture_state state)
void Session::update_signals()
{
void Session::update_signals()
{
- assert(device_);
+ if (!device_) {
+ signals_.clear();
+ logic_data_.reset();
+ return;
+ }
lock_guard<recursive_mutex> lock(data_mutex_);
lock_guard<recursive_mutex> lock(data_mutex_);
@@
-581,7
+590,7
@@
void Session::feed_in_analog(shared_ptr<Analog> analog)
if (iter != cur_analog_segments_.end())
segment = (*iter).second;
else {
if (iter != cur_analog_segments_.end())
segment = (*iter).second;
else {
- // If no segment was found, this means we havn't
+ // If no segment was found, this means we hav
e
n't
// created one yet. i.e. this is the first packet
// in the sweep containing this segment.
sweep_beginning = true;
// created one yet. i.e. this is the first packet
// in the sweep containing this segment.
sweep_beginning = true;