From 1eaae0de308e07c60c9ffd5a016020a9a9f0b6f5 Mon Sep 17 00:00:00 2001 From: Jason Gerecke Date: Fri, 20 Apr 2018 19:48:55 -0700 Subject: [PATCH] BFM demod: Delete the SpectrumVis when destroying BFMDemodGUI Take care of a pair of memory leaks that occur when the BFM demod GUI is closed. ==786== 19,952 (24 direct, 19,928 indirect) bytes in 1 blocks are definitely lost in loss record 7,065 of 7,081 ==786== at 0x4C2D54F: operator new(unsigned long) (vg_replace_malloc.c:334) ==786== by 0x54C82ED: allocate (new_allocator.h:111) ==786== by 0x54C82ED: allocate (alloc_traits.h:436) ==786== by 0x54C82ED: _M_get_node (stl_list.h:383) ==786== by 0x54C82ED: _M_create_node (stl_list.h:572) ==786== by 0x54C82ED: _M_insert (stl_list.h:1801) ==786== by 0x54C82ED: push_back (stl_list.h:1118) ==786== by 0x54C82ED: FFTWEngine::configure(int, bool) (fftwengine.cpp:35) ==786== by 0x4F4590B: SpectrumVis::handleConfigure(int, int, FFTWindow::Function) (spectrumvis.cpp:206) ==786== by 0x4F459EE: SpectrumVis::handleMessage(Message const&) (spectrumvis.cpp:170) ==786== by 0x548346C: BasebandSampleSink::handleInputMessages() (basebandsamplesink.cpp:21) ==786== by 0x69E1615: QMetaObject::activate(QObject*, int, int, void**) (in /usr/lib/libQt5Core.so.5.10.1) ==786== by 0x5497D4B: MessageQueue::push(Message*, bool) (messagequeue.cpp:52) ==786== by 0x33F9D61A: BFMDemodGUI::BFMDemodGUI(PluginAPI*, DeviceUISet*, BasebandSampleSink*, QWidget*) (bfmdemodgui.cpp:352) ==786== by 0x33F9D985: BFMDemodGUI::create(PluginAPI*, DeviceUISet*, BasebandSampleSink*) (bfmdemodgui.cpp:50) ==786== by 0x33FB035D: non-virtual thunk to BFMPlugin::createRxChannelGUI(DeviceUISet*, BasebandSampleSink*) (bfmplugin.cpp:57) ==786== by 0x4F47F19: DeviceUISet::loadRxChannelSettings(Preset const*, PluginAPI*) (deviceuiset.cpp:201) ==786== by 0x4EA51EA: MainWindow::loadPresetSettings(Preset const*, int) (mainwindow.cpp:575) ==786== by 0x4EAC81B: MainWindow::MainWindow(qtwebapp::LoggerWithFile*, MainParser const&, QWidget*) (mainwindow.cpp:176) ==786== by 0x10A49B: runQtApplication(int, char**, qtwebapp::LoggerWithFile*) (main.cpp:120) ==786== by 0x109B38: main (main.cpp:131) ==786== ==786== 54,096 (112 direct, 53,984 indirect) bytes in 1 blocks are definitely lost in loss record 7,075 of 7,081 ==786== at 0x4C2D54F: operator new(unsigned long) (vg_replace_malloc.c:334) ==786== by 0x69E9162: QObject::QObject(QObject*) (in /usr/lib/libQt5Core.so.5.10.1) ==786== by 0x5497BEE: MessageQueue::MessageQueue(QObject*) (messagequeue.cpp:26) ==786== by 0x54834FF: BasebandSampleSink::BasebandSampleSink() (basebandsamplesink.cpp:6) ==786== by 0x4F45A29: SpectrumVis::SpectrumVis(float, GLSpectrum*) (spectrumvis.cpp:26) ==786== by 0x33F9D53C: BFMDemodGUI::BFMDemodGUI(PluginAPI*, DeviceUISet*, BasebandSampleSink*, QWidget*) (bfmdemodgui.cpp:342) ==786== by 0x33F9D985: BFMDemodGUI::create(PluginAPI*, DeviceUISet*, BasebandSampleSink*) (bfmdemodgui.cpp:50) ==786== by 0x33FB035D: non-virtual thunk to BFMPlugin::createRxChannelGUI(DeviceUISet*, BasebandSampleSink*) (bfmplugin.cpp:57) ==786== by 0x4F47F19: DeviceUISet::loadRxChannelSettings(Preset const*, PluginAPI*) (deviceuiset.cpp:201) ==786== by 0x4EA51EA: MainWindow::loadPresetSettings(Preset const*, int) (mainwindow.cpp:575) ==786== by 0x4EAC81B: MainWindow::MainWindow(qtwebapp::LoggerWithFile*, MainParser const&, QWidget*) (mainwindow.cpp:176) ==786== by 0x10A49B: runQtApplication(int, char**, qtwebapp::LoggerWithFile*) (main.cpp:120) ==786== by 0x109B38: main (main.cpp:131) --- plugins/channelrx/demodbfm/bfmdemodgui.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/channelrx/demodbfm/bfmdemodgui.cpp b/plugins/channelrx/demodbfm/bfmdemodgui.cpp index 6707b01dd..92b73f77c 100644 --- a/plugins/channelrx/demodbfm/bfmdemodgui.cpp +++ b/plugins/channelrx/demodbfm/bfmdemodgui.cpp @@ -388,6 +388,7 @@ BFMDemodGUI::~BFMDemodGUI() { m_deviceUISet->removeRxChannelInstance(this); delete m_bfmDemod; // TODO: check this: when the GUI closes it has to delete the demodulator + delete m_spectrumVis; delete ui; }