]> sigrok.org Git - pulseview.git/blobdiff - pv/sigsession.cpp
Added error handling to SigSession::add_decoder
[pulseview.git] / pv / sigsession.cpp
index 1099ad46704c77b1ba12fb38ad9a1d61cf645ee7..e81d36051fa068e361eafb01c18ef3aeee02caaa 100644 (file)
@@ -34,6 +34,8 @@
 
 #include <assert.h>
 
+#include <stdexcept>
+
 #include <sys/stat.h>
 
 #include <QDebug>
@@ -193,20 +195,15 @@ boost::shared_ptr<data::Logic> SigSession::get_data()
        return _logic_data;
 }
 
-void SigSession::add_decoder(srd_decoder *const dec,
+bool SigSession::add_decoder(srd_decoder *const dec,
        std::map<const srd_probe*,
                boost::shared_ptr<view::Signal> > probes,
        GHashTable *options)
 {
+       try
        {
                lock_guard<mutex> lock(_signals_mutex);
 
-               if (!_decode_traces.empty()) {
-                       qDebug("Currently only one decode trace can be added "
-                               "at once");
-                       _decode_traces.clear();
-               }
-
                shared_ptr<data::Decoder> decoder(
                        new data::Decoder(dec, probes, options));
                shared_ptr<view::DecodeSignal> d(
@@ -214,7 +211,14 @@ void SigSession::add_decoder(srd_decoder *const dec,
                                _decode_traces.size()));
                _decode_traces.push_back(d);
        }
+       catch(std::runtime_error e)
+       {
+               return false;
+       }
+
        signals_changed();
+
+       return true;
 }
 
 vector< shared_ptr<view::DecodeSignal> > SigSession::get_decode_signals() const