X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fsession.cpp;h=dd78f4a176088ebb69cc5089558b4d310a7d4415;hb=ffe001198ecb5ea2e44c2947868c258afe948f20;hp=2cdc25f83ed0ee3c718896da9d8df98d13f34876;hpb=30d6f09f5eec0fb18d5c87347b5de6124a56a63c;p=pulseview.git diff --git a/pv/session.cpp b/pv/session.cpp index 2cdc25f..dd78f4a 100644 --- a/pv/session.cpp +++ b/pv/session.cpp @@ -133,7 +133,7 @@ void Session::set_device(shared_ptr device) (shared_ptr device, shared_ptr packet) { data_feed_in(device, packet); }); - update_signals(device_); + update_signals(); decode_traces_.clear(); @@ -301,13 +301,20 @@ void Session::set_capture_state(capture_state state) capture_state_changed(state); } -void Session::update_signals(shared_ptr device) +void Session::update_signals() { - assert(device); + assert(device_); assert(capture_state_ == Stopped); + const shared_ptr sr_dev = device_->device(); + if (!sr_dev) { + signals_.clear(); + logic_data_.reset(); + return; + } + // Detect what data types we will receive - auto channels = device->device()->channels(); + auto channels = sr_dev->channels(); unsigned int logic_channel_count = std::count_if( channels.begin(), channels.end(), [] (shared_ptr channel) { @@ -334,7 +341,7 @@ void Session::update_signals(shared_ptr device) unordered_set< shared_ptr > prev_sigs(signals_); signals_.clear(); - for (auto channel : device->device()->channels()) { + for (auto channel : sr_dev->channels()) { shared_ptr signal; // Find the channel in the old signals @@ -357,7 +364,7 @@ void Session::update_signals(shared_ptr device) case SR_CHANNEL_LOGIC: signal = shared_ptr( new view::LogicSignal(*this, - device, channel, + device_, channel, logic_data_)); break;