X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fsession.cpp;h=e8174915e4043c37d508c3371b0c8007d168bd06;hp=b1ce14680bbec848f6ae92fd3ec4010094d8320c;hb=7c61104601b14e1b22d1a35151e5bd92ca3e11de;hpb=a66e286e0276186c41b7ce07cfcbd0c4da2ca1cb diff --git a/pv/session.cpp b/pv/session.cpp index b1ce1468..e8174915 100644 --- a/pv/session.cpp +++ b/pv/session.cpp @@ -521,7 +521,7 @@ void Session::load_file(QString file_name, new devices::SessionFile( device_manager_.context(), file_name.toStdString()))); - } catch (Error e) { + } catch (Error& e) { main_bar_->session_error(tr("Failed to load ") + file_name, e.what()); set_default_device(); main_bar_->update_device_list(); @@ -732,7 +732,7 @@ shared_ptr Session::add_decode_signal() // Add the decode signal to all views for (shared_ptr view : views_) view->add_decode_signal(signal); - } catch (runtime_error e) { + } catch (runtime_error& e) { remove_decode_signal(signal); return nullptr; } @@ -934,7 +934,7 @@ void Session::sample_thread_proc(function error_handler) try { device_->start(); - } catch (Error e) { + } catch (Error& e) { error_handler(e.what()); return; } @@ -944,7 +944,7 @@ void Session::sample_thread_proc(function error_handler) try { device_->run(); - } catch (Error e) { + } catch (Error& e) { error_handler(e.what()); set_capture_state(Stopped); return; @@ -1253,7 +1253,7 @@ void Session::data_feed_in(shared_ptr device, case SR_DF_LOGIC: try { feed_in_logic(dynamic_pointer_cast(packet->payload())); - } catch (bad_alloc) { + } catch (bad_alloc&) { out_of_memory_ = true; device_->stop(); } @@ -1262,7 +1262,7 @@ void Session::data_feed_in(shared_ptr device, case SR_DF_ANALOG: try { feed_in_analog(dynamic_pointer_cast(packet->payload())); - } catch (bad_alloc) { + } catch (bad_alloc&) { out_of_memory_ = true; device_->stop(); } @@ -1282,6 +1282,15 @@ void Session::data_feed_in(shared_ptr device, // devices use frames, and for those devices, we need to do it here. { lock_guard lock(data_mutex_); + + if (cur_logic_segment_) + cur_logic_segment_->set_complete(); + + for (auto entry : cur_analog_segments_) { + shared_ptr segment = entry.second; + segment->set_complete(); + } + cur_logic_segment_.reset(); cur_analog_segments_.clear(); }