]> sigrok.org Git - pulseview.git/blobdiff - pv/storesession.cpp
DecodeSignal: Re-set decoder metadata after stack termination
[pulseview.git] / pv / storesession.cpp
index 50815c26dcedfcaff7716f115b2eb376c371960a..3d7b058a87034b6c02cc4109347e798b94702b40 100644 (file)
@@ -145,6 +145,7 @@ bool StoreSession::start()
        uint64_t end_sample;
 
        if (sample_range_.first == sample_range_.second) {
+               // No sample range specified, save everything we have
                start_sample_ = 0;
                sample_count_ = any_segment->get_sample_count();
        } else {
@@ -159,6 +160,12 @@ bool StoreSession::start()
                }
        }
 
+       // Make sure the sample range is valid
+       if (start_sample_ > any_segment->get_sample_count()) {
+               error_ = tr("Can't save range without sample data.");
+               return false;
+       }
+
        // Begin storing
        try {
                const auto context = session_.device_manager().context();
@@ -175,7 +182,7 @@ bool StoreSession::start()
                        {{ConfigKey::SAMPLERATE, Glib::Variant<guint64>::create(
                                any_segment->samplerate())}});
                output_->receive(meta);
-       } catch (Error error) {
+       } catch (Error& error) {
                error_ = tr("Error while saving: ") + error.what();
                return false;
        }
@@ -269,7 +276,7 @@ void StoreSession::store_proc(vector< shared_ptr<data::SignalBase> > achannel_li
 
                                delete[] ldata;
                        }
-               } catch (Error error) {
+               } catch (Error& error) {
                        error_ = tr("Error while saving: ") + error.what();
                        break;
                }