diff --git a/DSView/pv/config/appconfig.cpp b/DSView/pv/config/appconfig.cpp index 3901c7bf..b921a631 100644 --- a/DSView/pv/config/appconfig.cpp +++ b/DSView/pv/config/appconfig.cpp @@ -269,7 +269,7 @@ QString GetDirectoryName(QString path) } QString GetIconPath() -{ +{ QString style = AppConfig::Instance()._frameOptions.style; if (style == ""){ style = "dark"; diff --git a/DSView/pv/data/analog.cpp b/DSView/pv/data/analog.cpp index 4dfcc8c4..16339621 100755 --- a/DSView/pv/data/analog.cpp +++ b/DSView/pv/data/analog.cpp @@ -22,6 +22,7 @@ #include "analog.h" #include "analogsnapshot.h" +#include using namespace std; @@ -29,9 +30,11 @@ using namespace std; namespace pv { namespace data { -Analog::Analog() : +Analog::Analog(AnalogSnapshot *snapshot) : SignalData() { + assert(snapshot); + _snapshots.push_front(snapshot); } void Analog::push_snapshot(AnalogSnapshot *snapshot) @@ -57,5 +60,10 @@ void Analog::init() s->init(); } +AnalogSnapshot* Analog::snapshot() +{ + return _snapshots[0]; +} + } // namespace data } // namespace pv diff --git a/DSView/pv/data/analog.h b/DSView/pv/data/analog.h index dbba04df..d3541f8e 100755 --- a/DSView/pv/data/analog.h +++ b/DSView/pv/data/analog.h @@ -37,13 +37,15 @@ class AnalogSnapshot; class Analog : public SignalData { public: - Analog(); + Analog(AnalogSnapshot *snapshot); void push_snapshot(AnalogSnapshot *snapshot); std::deque& get_snapshots(); void clear(); void init(); + AnalogSnapshot* snapshot(); + private: std::deque _snapshots; }; diff --git a/DSView/pv/data/decoderstack.cpp b/DSView/pv/data/decoderstack.cpp index 4aa6a86e..4c76ac7e 100755 --- a/DSView/pv/data/decoderstack.cpp +++ b/DSView/pv/data/decoderstack.cpp @@ -401,8 +401,7 @@ void DecoderStack::do_decode_work() pv::data::Logic *data = NULL; if (!_options_changed) - { - qDebug()<<"data not be ready"; + { return; } _options_changed = false; @@ -542,9 +541,7 @@ void DecoderStack::decode_data(const uint64_t decode_start, const uint64_t decod if (error) g_free(error); - - qDebug()<<"decode tack proc end"; - + if (!_session->is_closed()) decode_done(); } @@ -565,8 +562,7 @@ void DecoderStack::decode_proc() // Get the intial sample count _sample_count = _snapshot->get_sample_count(); - - qDebug()<<"sample count:"<<_sample_count; + // Create the decoders for(auto &dec : _stack) diff --git a/DSView/pv/data/dso.cpp b/DSView/pv/data/dso.cpp index acbd6c62..ea05f5b7 100755 --- a/DSView/pv/data/dso.cpp +++ b/DSView/pv/data/dso.cpp @@ -21,6 +21,7 @@ #include "dso.h" #include "dsosnapshot.h" +#include using namespace std; @@ -28,9 +29,11 @@ using namespace std; namespace pv { namespace data { -Dso::Dso() : +Dso::Dso(DsoSnapshot *snapshot) : SignalData() { + assert(snapshot); + _snapshots.push_front(snapshot); } void Dso::push_snapshot(DsoSnapshot *snapshot) @@ -57,5 +60,10 @@ void Dso::init() s->init(); } + DsoSnapshot* Dso::snapshot() + { + return _snapshots[0]; + } + } // namespace data } // namespace pv diff --git a/DSView/pv/data/dso.h b/DSView/pv/data/dso.h index 1ef87645..cd03988d 100755 --- a/DSView/pv/data/dso.h +++ b/DSView/pv/data/dso.h @@ -35,7 +35,7 @@ class DsoSnapshot; class Dso : public SignalData { public: - Dso(); + Dso(DsoSnapshot *snapshot); void push_snapshot(DsoSnapshot *snapshot); @@ -44,6 +44,8 @@ public: void clear(); void init(); + DsoSnapshot* snapshot(); + private: std::deque _snapshots; }; diff --git a/DSView/pv/data/logic.cpp b/DSView/pv/data/logic.cpp index 71055656..ccc7ec54 100755 --- a/DSView/pv/data/logic.cpp +++ b/DSView/pv/data/logic.cpp @@ -22,15 +22,18 @@ #include "logic.h" #include "logicsnapshot.h" +#include using namespace std; namespace pv { namespace data { -Logic::Logic() : +Logic::Logic(LogicSnapshot *snapshot) : SignalData() { + assert(snapshot); + _snapshots.push_front(snapshot); } void Logic::push_snapshot(LogicSnapshot *snapshot) @@ -57,5 +60,10 @@ void Logic::init() s->init(); } + LogicSnapshot* Logic::snapshot() + { + return _snapshots[0]; + } + } // namespace data } // namespace pv diff --git a/DSView/pv/data/logic.h b/DSView/pv/data/logic.h index 2eb76aed..5f925a1c 100755 --- a/DSView/pv/data/logic.h +++ b/DSView/pv/data/logic.h @@ -36,7 +36,7 @@ class LogicSnapshot; class Logic : public SignalData { public: - Logic(); + Logic(LogicSnapshot *snapshot); void push_snapshot(LogicSnapshot *snapshot); @@ -46,6 +46,8 @@ public: void init(); + LogicSnapshot* snapshot(); + private: std::deque _snapshots; }; diff --git a/DSView/pv/device/devinst.cpp b/DSView/pv/device/devinst.cpp index a17b6098..b0bf7d5a 100755 --- a/DSView/pv/device/devinst.cpp +++ b/DSView/pv/device/devinst.cpp @@ -53,7 +53,6 @@ void* DevInst::get_id() void DevInst::use(SigSession *owner) { assert(owner); - assert(!_owner); _owner = owner; } diff --git a/DSView/pv/dialogs/dsmessagebox.cpp b/DSView/pv/dialogs/dsmessagebox.cpp index eb8f8bbd..2df07b6e 100755 --- a/DSView/pv/dialogs/dsmessagebox.cpp +++ b/DSView/pv/dialogs/dsmessagebox.cpp @@ -36,6 +36,7 @@ namespace dialogs { DSMessageBox::DSMessageBox(QWidget *parent,const char *title) : QDialog(NULL) //must be null, otherwise window can not able to move { + (void)parent; _layout = NULL; _main_widget = NULL; _msg = NULL; diff --git a/DSView/pv/dsvdef.h b/DSView/pv/dsvdef.h index cc5283c8..9069c153 100644 --- a/DSView/pv/dsvdef.h +++ b/DSView/pv/dsvdef.h @@ -39,6 +39,8 @@ class QWidget; #define DESTROY_QT_OBJECT(p) if((p)){((p))->deleteLater(); p = NULL;} #define DESTROY_QT_LATER(p) ((p))->deleteLater(); +#define RELEASE_ARRAY(a) for (auto ptr : (a)){delete ptr;} (a).clear(); + namespace DecoderDataFormat { enum _data_format diff --git a/DSView/pv/mainwindow.cpp b/DSView/pv/mainwindow.cpp index 79b986a4..5186f719 100755 --- a/DSView/pv/mainwindow.cpp +++ b/DSView/pv/mainwindow.cpp @@ -1432,7 +1432,7 @@ void MainWindow::switchTheme(QString style) { app._frameOptions.style = style; app.SaveFrame(); - } + } QString qssRes = ":/" + style + ".qss"; QFile qss(qssRes); diff --git a/DSView/pv/sigsession.cpp b/DSView/pv/sigsession.cpp index b63d1aa9..a42432db 100755 --- a/DSView/pv/sigsession.cpp +++ b/DSView/pv/sigsession.cpp @@ -78,15 +78,7 @@ namespace pv { // TODO: This should not be necessary SigSession* SigSession::_session = NULL; -SigSession::SigSession(DeviceManager *device_manager) : - _capture_state(Init), - _instant(false), - _error(No_err), - _run_mode(Single), - _repeat_intvl(1), - _repeating(false), - _repeat_hold_prg(0), - _map_zoom(0) +SigSession::SigSession(DeviceManager *device_manager) { _hotplug_handle = 0; _dev_inst = NULL; @@ -97,6 +89,15 @@ SigSession::SigSession(DeviceManager *device_manager) : _hot_detach = false; _group_cnt = 0; _bHotplugStop = false; + + _map_zoom = 0; + _repeat_hold_prg = 0; + _repeating = false; + _repeat_intvl = 1; + _run_mode = Single; + _error = No_err; + _instant = false; + _capture_state = Init; _noData_cnt = 0; _data_lock = false; @@ -112,16 +113,10 @@ SigSession::SigSession(DeviceManager *device_manager) : _bDecodeRunning = false; _bClose = false; - // Create snapshots & data containers - _cur_logic_snapshot = new data::LogicSnapshot(); - _logic_data = new data::Logic(); - _logic_data->push_snapshot(_cur_logic_snapshot); - _cur_dso_snapshot = new data::DsoSnapshot(); - _dso_data = new data::Dso(); - _dso_data->push_snapshot(_cur_dso_snapshot); - _cur_analog_snapshot = new data::AnalogSnapshot(); - _analog_data = new data::Analog(); - _analog_data->push_snapshot(_cur_analog_snapshot); + // Create snapshots & data containers + _logic_data = new data::Logic(new data::LogicSnapshot()); + _dso_data = new data::Dso(new data::DsoSnapshot()); + _analog_data = new data::Analog(new data::AnalogSnapshot()); _group_data = new data::Group(); _group_cnt = 0; @@ -142,13 +137,9 @@ DevInst* SigSession::get_device() } void SigSession::deselect_device() -{ - for (auto p : _decode_traces){ - delete p; - } - _decode_traces.clear(); - - _group_traces.clear(); +{ + RELEASE_ARRAY(_decode_traces); + RELEASE_ARRAY(_group_traces); _dev_inst = NULL; } @@ -172,12 +163,8 @@ void SigSession::set_device(DevInst *dev_inst) _dev_inst = dev_inst; - for (auto p : _decode_traces){ - delete p; - } - _decode_traces.clear(); - - _group_traces.clear(); + RELEASE_ARRAY(_decode_traces); + RELEASE_ARRAY(_group_traces); if (_dev_inst) { try { @@ -517,9 +504,9 @@ void SigSession::sample_thread_proc(DevInst *dev_inst, set_capture_state(Stopped); // Confirm that SR_DF_END was received - assert(_cur_logic_snapshot->last_ended()); - assert(_cur_dso_snapshot->last_ended()); - assert(_cur_analog_snapshot->last_ended()); + assert(_logic_data->snapshot()->last_ended()); + assert(_dso_data->snapshot()->last_ended()); + assert(_analog_data->snapshot()->last_ended()); } void SigSession::stop_capture() @@ -654,7 +641,8 @@ void SigSession::del_group() { auto i = _group_traces.begin(); - while (i != _group_traces.end()) { + while (i != _group_traces.end()) { + pv::view::GroupSignal *psig = *(i); if (psig->selected()) { @@ -711,12 +699,8 @@ void SigSession::init_signals() _group_data->clear(); - // Clear the decode traces - for (auto p : _decode_traces){ - delete p; - } - _decode_traces.clear(); - + // Clear the decode traces + RELEASE_ARRAY(_decode_traces); // Detect what data types we will receive if(_dev_inst) { @@ -743,41 +727,42 @@ void SigSession::init_signals() } } - // Make the logic probe list + // Make the logic probe list + RELEASE_ARRAY(_group_traces); + + std::vector().swap(_group_traces); + + for (GSList *l = _dev_inst->dev_inst()->channels; l; l = l->next) { - _group_traces.clear(); - std::vector().swap(_group_traces); + sr_channel *probe = + (sr_channel *)l->data; + assert(probe); + signal = NULL; - for (GSList *l = _dev_inst->dev_inst()->channels; l; l = l->next) { - sr_channel *probe = - ( sr_channel *)l->data; - assert(probe); - signal = NULL; + switch (probe->type) + { + case SR_CHANNEL_LOGIC: + if (probe->enabled) + signal = new view::LogicSignal(_dev_inst, _logic_data, probe); + break; - switch(probe->type) { - case SR_CHANNEL_LOGIC: - if (probe->enabled) - signal = new view::LogicSignal(_dev_inst, _logic_data, probe); - break; + case SR_CHANNEL_DSO: + signal = new view::DsoSignal(_dev_inst, _dso_data, probe); + break; - case SR_CHANNEL_DSO: - signal = new view::DsoSignal(_dev_inst, _dso_data, probe); - break; - - case SR_CHANNEL_ANALOG: - if (probe->enabled) - signal = new view::AnalogSignal(_dev_inst, _analog_data, probe); - break; - } - if(signal != NULL) - sigs.push_back(signal); + case SR_CHANNEL_ANALOG: + if (probe->enabled) + signal = new view::AnalogSignal(_dev_inst, _analog_data, probe); + break; } - - _signals.clear(); - std::vector().swap(_signals); - _signals = sigs; + if (signal != NULL) + sigs.push_back(signal); } + RELEASE_ARRAY(_signals); + std::vector().swap(_signals); + _signals = sigs; + spectrum_rebuild(); lissajous_disable(); math_disable(); @@ -846,8 +831,8 @@ void SigSession::reload() sigs.push_back(signal); } - if (!sigs.empty()) { - _signals.clear(); + if (!sigs.empty()) { + RELEASE_ARRAY(_signals); std::vector().swap(_signals); _signals = sigs; } @@ -869,8 +854,8 @@ void SigSession::refresh(int holdtime) { d->decoder()->init(); } - } + if (_dso_data) { _dso_data->init(); // SpectrumStack @@ -879,9 +864,11 @@ void SigSession::refresh(int holdtime) assert(m); m->get_spectrum_stack()->init(); } + if (_math_trace) _math_trace->get_math_stack()->init(); } + if (_analog_data) { _analog_data->init(); } @@ -975,7 +962,7 @@ void SigSession::feed_in_trigger(const ds_trigger_pos &trigger_pos) void SigSession::feed_in_logic(const sr_datafeed_logic &logic) { - if (!_logic_data || _cur_logic_snapshot->memory_failed()) { + if (!_logic_data || _logic_data->snapshot()->memory_failed()) { qDebug() << "Unexpected logic packet"; return; } @@ -986,8 +973,8 @@ void SigSession::feed_in_logic(const sr_datafeed_logic &logic) session_error(); } - if (_cur_logic_snapshot->last_ended()) { - _cur_logic_snapshot->first_payload(logic, _dev_inst->get_sample_limit(), _dev_inst->dev_inst()->channels); + if (_logic_data->snapshot()->last_ended()) { + _logic_data->snapshot()->first_payload(logic, _dev_inst->get_sample_limit(), _dev_inst->dev_inst()->channels); // @todo Putting this here means that only listeners querying // for logic will be notified. Currently the only user of // frame_began is DecoderStack, but in future we need to signal @@ -995,10 +982,10 @@ void SigSession::feed_in_logic(const sr_datafeed_logic &logic) frame_began(); } else { // Append to the existing data snapshot - _cur_logic_snapshot->append_payload(logic); + _logic_data->snapshot()->append_payload(logic); } - if (_cur_logic_snapshot->memory_failed()) { + if (_logic_data->snapshot()->memory_failed()) { _error = Malloc_err; session_error(); return; @@ -1012,13 +999,13 @@ void SigSession::feed_in_logic(const sr_datafeed_logic &logic) void SigSession::feed_in_dso(const sr_datafeed_dso &dso) { - if(!_dso_data || _cur_dso_snapshot->memory_failed()) + if(!_dso_data || _dso_data->snapshot()->memory_failed()) { qDebug() << "Unexpected dso packet"; return; // This dso packet was not expected. } - if (_cur_dso_snapshot->last_ended()) + if (_dso_data->snapshot()->last_ended()) { std::map sig_enable; // reset scale of dso signal @@ -1033,10 +1020,10 @@ void SigSession::feed_in_dso(const sr_datafeed_dso &dso) } // first payload - _cur_dso_snapshot->first_payload(dso, _dev_inst->get_sample_limit(), sig_enable, _instant); + _dso_data->snapshot()->first_payload(dso, _dev_inst->get_sample_limit(), sig_enable, _instant); } else { // Append to the existing data snapshot - _cur_dso_snapshot->append_payload(dso); + _dso_data->snapshot()->append_payload(dso); } for(auto &s : _signals) { @@ -1051,7 +1038,7 @@ void SigSession::feed_in_dso(const sr_datafeed_dso &dso) } - if (_cur_dso_snapshot->memory_failed()) { + if (_dso_data->snapshot()->memory_failed()) { _error = Malloc_err; session_error(); return; @@ -1084,13 +1071,13 @@ void SigSession::feed_in_dso(const sr_datafeed_dso &dso) void SigSession::feed_in_analog(const sr_datafeed_analog &analog) { - if(!_analog_data || _cur_analog_snapshot->memory_failed()) + if(!_analog_data || _analog_data->snapshot()->memory_failed()) { qDebug() << "Unexpected analog packet"; return; // This analog packet was not expected. } - if (_cur_analog_snapshot->last_ended()) + if (_analog_data->snapshot()->last_ended()) { // reset scale of analog signal for(auto &s : _signals) @@ -1103,13 +1090,13 @@ void SigSession::feed_in_analog(const sr_datafeed_analog &analog) } // first payload - _cur_analog_snapshot->first_payload(analog, _dev_inst->get_sample_limit(), _dev_inst->dev_inst()->channels); + _analog_data->snapshot()->first_payload(analog, _dev_inst->get_sample_limit(), _dev_inst->dev_inst()->channels); } else { // Append to the existing data snapshot - _cur_analog_snapshot->append_payload(analog); + _analog_data->snapshot()->append_payload(analog); } - if (_cur_analog_snapshot->memory_failed()) { + if (_analog_data->snapshot()->memory_failed()) { _error = Malloc_err; session_error(); return; @@ -1179,7 +1166,7 @@ void SigSession::data_feed_in(const struct sr_dev_inst *sdi, } case SR_DF_END: { - if (!_cur_logic_snapshot->empty()) + if (!_logic_data->snapshot()->empty()) { for (auto &g : _group_traces) { @@ -1189,9 +1176,9 @@ void SigSession::data_feed_in(const struct sr_dev_inst *sdi, _group_data->push_snapshot(p); } } - _cur_logic_snapshot->capture_ended(); - _cur_dso_snapshot->capture_ended(); - _cur_analog_snapshot->capture_ended(); + _logic_data->snapshot()->capture_ended(); + _dso_data->snapshot()->capture_ended(); + _analog_data->snapshot()->capture_ended(); qDebug()<<"data frame end"; @@ -1486,8 +1473,9 @@ void SigSession::spectrum_rebuild() } } - if (!has_dso_signal) - _spectrum_traces.clear(); + if (!has_dso_signal){ + RELEASE_ARRAY(_spectrum_traces); + } signals_changed(); } @@ -1499,6 +1487,7 @@ std::vector& SigSession::get_spectrum_traces() void SigSession::lissajous_rebuild(bool enable, int xindex, int yindex, double percent) { + DESTROY_OBJECT(_lissajous_trace); _lissajous_trace = new view::LissajousTrace(enable, _dso_data, xindex, yindex, percent); signals_changed(); } @@ -1590,11 +1579,11 @@ void SigSession::feed_timeout() data::Snapshot* SigSession::get_snapshot(int type) { if (type == SR_CHANNEL_LOGIC) - return _cur_logic_snapshot; + return _logic_data->snapshot(); else if (type == SR_CHANNEL_ANALOG) - return _cur_analog_snapshot; + return _analog_data->snapshot(); else if (type == SR_CHANNEL_DSO) - return _cur_dso_snapshot; + return _dso_data->snapshot(); else return NULL; } @@ -1892,7 +1881,7 @@ void SigSession::set_stop_scale(float scale) int dex = 0; for (auto trace : _decode_traces) { - if (trace->IsRunning()) + if (trace->decoder()->IsRunning()) { trace->decoder()->stop_decode_work(); runningDex = dex; diff --git a/DSView/pv/sigsession.h b/DSView/pv/sigsession.h index 9e1d124e..c5f97439 100755 --- a/DSView/pv/sigsession.h +++ b/DSView/pv/sigsession.h @@ -483,12 +483,9 @@ private: view::LissajousTrace *_lissajous_trace; view::MathTrace *_math_trace; - data::Logic *_logic_data; - data::LogicSnapshot *_cur_logic_snapshot; - data::Dso *_dso_data; - data::DsoSnapshot *_cur_dso_snapshot; + data::Logic *_logic_data; + data::Dso *_dso_data; data::Analog *_analog_data; - data::AnalogSnapshot *_cur_analog_snapshot; data::Group *_group_data; int _group_cnt; diff --git a/DSView/pv/toolbars/titlebar.cpp b/DSView/pv/toolbars/titlebar.cpp index 306a417a..d52b18fc 100755 --- a/DSView/pv/toolbars/titlebar.cpp +++ b/DSView/pv/toolbars/titlebar.cpp @@ -38,17 +38,17 @@ namespace pv { namespace toolbars { TitleBar::TitleBar(bool top, QWidget *parent, bool hasClose) : - QWidget(parent), - _parent(parent), - _moving(false), - _isTop(top), - _hasClose(hasClose) + QWidget(parent) { _title = NULL; _minimizeButton = NULL; _maximizeButton = NULL; _closeButton = NULL; _lay = NULL; + _moving = false; + _parent = parent; + _isTop = top; + _hasClose = hasClose; assert(parent); diff --git a/DSView/pv/toolbars/trigbar.cpp b/DSView/pv/toolbars/trigbar.cpp index ea5f7c8e..2d6cdf29 100755 --- a/DSView/pv/toolbars/trigbar.cpp +++ b/DSView/pv/toolbars/trigbar.cpp @@ -180,7 +180,8 @@ void TrigBar::reStyle() AppConfig &app = AppConfig::Instance(); - _themes->setIcon(QIcon(iconPath+"/"+ app._frameOptions.language +".svg")); + QString icon_fname = iconPath +"/"+ app._frameOptions.style +".svg"; + _themes->setIcon(QIcon(icon_fname)); } void TrigBar::protocol_clicked() @@ -302,13 +303,15 @@ void TrigBar::on_actionMath_triggered() void TrigBar::on_actionDark_triggered() { sig_setTheme(DARK_STYLE); - _themes->setIcon(QIcon(":/icons/"+DARK_STYLE+"/"+DARK_STYLE+".svg")); + QString icon = GetIconPath() + "/" + DARK_STYLE + ".svg"; + _themes->setIcon(QIcon(icon)); } void TrigBar::on_actionLight_triggered() { sig_setTheme(LIGHT_STYLE); - _themes->setIcon(QIcon(":/icons/"+LIGHT_STYLE+"/"+LIGHT_STYLE+".svg")); + QString icon = GetIconPath() + "/" + LIGHT_STYLE +".svg"; + _themes->setIcon(QIcon(icon)); } void TrigBar::on_actionLissajous_triggered() diff --git a/DSView/pv/view/devmode.cpp b/DSView/pv/view/devmode.cpp index 48e36f81..9ca629b1 100755 --- a/DSView/pv/view/devmode.cpp +++ b/DSView/pv/view/devmode.cpp @@ -111,18 +111,20 @@ void DevMode::set_device() l; l = l->next) { const sr_dev_mode *mode = (const sr_dev_mode *)l->data; QString icon_name = QString::fromLocal8Bit(mode->icon); - + QAction *action = new QAction(this); action->setIcon(QIcon(iconPath+"square-"+icon_name)); if (lan == QLocale::Chinese) action->setText(mode->name_cn); else action->setText(mode->name); + connect(action, SIGNAL(triggered()), this, SLOT(on_mode_change())); _mode_list[action] = mode; if (dev_inst->dev_inst()->mode == _mode_list[action]->mode) { - _mode_btn->setIcon(QIcon(iconPath+icon_name)); + QString icon_fname = iconPath + icon_name; + _mode_btn->setIcon(QIcon(icon_fname)); if (lan== QLocale::Chinese) _mode_btn->setText(mode->name_cn); else @@ -176,8 +178,9 @@ void DevMode::on_mode_change() SR_CONF_DEVICE_MODE, g_variant_new_int16((*i).second->mode)); - QString icon_name = "/" + QString::fromLocal8Bit((*i).second->icon); - _mode_btn->setIcon(QIcon(iconPath+icon_name)); + QString icon_fname = iconPath + "/" + QString::fromLocal8Bit((*i).second->icon); + + _mode_btn->setIcon(QIcon(icon_fname)); if (lan == QLocale::Chinese) _mode_btn->setText((*i).second->name_cn); else diff --git a/DSView/pv/view/mathtrace.cpp b/DSView/pv/view/mathtrace.cpp index c8f6753c..78a34280 100755 --- a/DSView/pv/view/mathtrace.cpp +++ b/DSView/pv/view/mathtrace.cpp @@ -31,8 +31,8 @@ #include "../sigsession.h" #include "../device/devinst.h" #include "../view/dsosignal.h" - - +#include "../dsvdef.h" + #include #include @@ -67,6 +67,7 @@ MathTrace::MathTrace(bool enable,data::MathStack *math_stack, MathTrace::~MathTrace() { + DESTROY_OBJECT(_math_stack); } bool MathTrace::enabled() diff --git a/DSView/pv/view/spectrumtrace.cpp b/DSView/pv/view/spectrumtrace.cpp index 6f7ceba3..3115bf33 100755 --- a/DSView/pv/view/spectrumtrace.cpp +++ b/DSView/pv/view/spectrumtrace.cpp @@ -33,6 +33,7 @@ #include "../view/viewport.h" #include "../device/devinst.h" #include "../data/spectrumstack.h" +#include "../dsvdef.h" using namespace boost; using namespace std; @@ -90,7 +91,7 @@ SpectrumTrace::SpectrumTrace(pv::SigSession *session, SpectrumTrace::~SpectrumTrace() { - + DESTROY_OBJECT(_spectrum_stack); } bool SpectrumTrace::enabled()