From 7b4e751ba1a9173b970133574b80afadc530bce3 Mon Sep 17 00:00:00 2001 From: f4exb Date: Mon, 19 Aug 2024 00:31:55 +0200 Subject: [PATCH] DeviceSet and DeviceUISet: use delete channel API instead of destroy method so that the virtual destructor of the channel is called appropriately --- sdrbase/device/deviceset.cpp | 10 +++++----- sdrbase/device/deviceset.h | 4 +--- sdrgui/device/deviceuiset.cpp | 10 +++++----- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/sdrbase/device/deviceset.cpp b/sdrbase/device/deviceset.cpp index 704e4ae66..731188277 100644 --- a/sdrbase/device/deviceset.cpp +++ b/sdrbase/device/deviceset.cpp @@ -59,7 +59,7 @@ void DeviceSet::freeChannels() for(int i = 0; i < m_channelInstanceRegistrations.count(); i++) { qDebug("DeviceSet::freeChannels: destroying channel [%s]", qPrintable(m_channelInstanceRegistrations[i]->getURI())); - m_channelInstanceRegistrations[i]->destroy(); + delete m_channelInstanceRegistrations[i]; } MainCore::instance()->clearChannels(this); @@ -87,7 +87,7 @@ void DeviceSet::deleteChannel(int channelIndex) { if (channelIndex < m_channelInstanceRegistrations.count()) { - m_channelInstanceRegistrations[channelIndex]->destroy(); + delete m_channelInstanceRegistrations[channelIndex]; m_channelInstanceRegistrations.removeAt(channelIndex); MainCore::instance()->removeChannelInstanceAt(this, channelIndex); renameChannelInstances(); @@ -141,7 +141,7 @@ void DeviceSet::loadRxChannelSettings(const Preset *preset, PluginAPI *pluginAPI PluginAPI::ChannelRegistrations *channelRegistrations = pluginAPI->getRxChannelRegistrations(); // copy currently open channels and clear list - ChannelInstanceRegistrations openChannels = m_channelInstanceRegistrations; + QList openChannels = m_channelInstanceRegistrations; m_channelInstanceRegistrations.clear(); mainCore->clearChannels(this); @@ -241,7 +241,7 @@ void DeviceSet::loadTxChannelSettings(const Preset *preset, PluginAPI *pluginAPI PluginAPI::ChannelRegistrations *channelRegistrations = pluginAPI->getTxChannelRegistrations(); // copy currently open channels and clear list - ChannelInstanceRegistrations openChannels = m_channelInstanceRegistrations; + QList openChannels = m_channelInstanceRegistrations; m_channelInstanceRegistrations.clear(); mainCore->clearChannels(this); @@ -339,7 +339,7 @@ void DeviceSet::loadMIMOChannelSettings(const Preset *preset, PluginAPI *pluginA PluginAPI::ChannelRegistrations *channelRegistrations = pluginAPI->getMIMOChannelRegistrations(); // copy currently open channels and clear list - ChannelInstanceRegistrations openChannels = m_channelInstanceRegistrations; + QList openChannels = m_channelInstanceRegistrations; m_channelInstanceRegistrations.clear(); mainCore->clearChannels(this); diff --git a/sdrbase/device/deviceset.h b/sdrbase/device/deviceset.h index 7b65afe6e..f412bb788 100644 --- a/sdrbase/device/deviceset.h +++ b/sdrbase/device/deviceset.h @@ -86,9 +86,7 @@ public: int webapiSpectrumServerDelete(SWGSDRangel::SWGSuccessResponse& response, QString& errorMessage); private: - typedef QList ChannelInstanceRegistrations; - - ChannelInstanceRegistrations m_channelInstanceRegistrations; + QList m_channelInstanceRegistrations; int m_deviceTabIndex; void renameChannelInstances(); diff --git a/sdrgui/device/deviceuiset.cpp b/sdrgui/device/deviceuiset.cpp index 98a167374..d56a46cfb 100644 --- a/sdrgui/device/deviceuiset.cpp +++ b/sdrgui/device/deviceuiset.cpp @@ -170,7 +170,7 @@ void DeviceUISet::freeChannels() { qDebug("DeviceUISet::freeChannels: destroying channel [%s]", qPrintable(m_channelInstanceRegistrations[i].m_channelAPI->getURI())); m_channelInstanceRegistrations[i].m_gui->destroy(); - m_channelInstanceRegistrations[i].m_channelAPI->destroy(); + delete m_channelInstanceRegistrations[i].m_channelAPI; } m_channelInstanceRegistrations.clear(); @@ -185,7 +185,7 @@ void DeviceUISet::deleteChannel(int channelIndex) qPrintable(m_channelInstanceRegistrations[channelIndex].m_channelAPI->getURI()), channelIndex); m_channelInstanceRegistrations[channelIndex].m_gui->destroy(); - m_channelInstanceRegistrations[channelIndex].m_channelAPI->destroy(); + delete m_channelInstanceRegistrations[channelIndex].m_channelAPI; m_channelInstanceRegistrations.removeAt(channelIndex); } @@ -324,7 +324,7 @@ void DeviceUISet::loadRxChannelSettings(const Preset *preset, PluginAPI *pluginA qPrintable(m_channelInstanceRegistrations[i].m_channelAPI->getURI())); m_channelInstanceRegistrations[i].m_channelAPI->setMessageQueueToGUI(nullptr); // have channel stop sending messages to its GUI m_channelInstanceRegistrations[i].m_gui->destroy(); - m_channelInstanceRegistrations[i].m_channelAPI->destroy(); + delete m_channelInstanceRegistrations[i].m_channelAPI; } m_channelInstanceRegistrations.clear(); @@ -453,7 +453,7 @@ void DeviceUISet::loadTxChannelSettings(const Preset *preset, PluginAPI *pluginA qPrintable(m_channelInstanceRegistrations[i].m_channelAPI->getURI())); m_channelInstanceRegistrations[i].m_channelAPI->setMessageQueueToGUI(nullptr); // have channel stop sending messages to its GUI m_channelInstanceRegistrations[i].m_gui->destroy(); - m_channelInstanceRegistrations[i].m_channelAPI->destroy(); + delete m_channelInstanceRegistrations[i].m_channelAPI; } m_channelInstanceRegistrations.clear(); @@ -579,7 +579,7 @@ void DeviceUISet::loadMIMOChannelSettings(const Preset *preset, PluginAPI *plugi qDebug("DeviceUISet::loadMIMOChannelSettings: destroying old channel [%s]", qPrintable(m_channelInstanceRegistrations[i].m_channelAPI->getURI())); m_channelInstanceRegistrations[i].m_gui->destroy(); // stop GUI first (issue #1427) - m_channelInstanceRegistrations[i].m_channelAPI->destroy(); // stop channel before (issue #860) + delete m_channelInstanceRegistrations[i].m_channelAPI; // stop channel before (issue #860) } m_channelInstanceRegistrations.clear();