1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2026-06-17 21:28:43 -04:00

Fix memory leak and race condition relating to DSP*Engines. Part of #2159

This commit is contained in:
srcejon
2024-11-14 11:42:53 +00:00
parent 7c7a7d7c1e
commit 6dcc342c10
3 changed files with 37 additions and 17 deletions
+12 -10
View File
@@ -187,39 +187,41 @@ void DSPEngine::removeLastDeviceMIMOEngine()
}
}
QThread * DSPEngine::removeDeviceEngineAt(int deviceIndex)
QThread *DSPEngine::getDeviceEngineThread(int deviceIndex)
{
if (deviceIndex >= m_deviceEngineReferences.size()) {
return nullptr;
} else {
return m_deviceEngineReferences[deviceIndex].m_thread;
}
}
QThread *deviceThread = nullptr;
void DSPEngine::removeDeviceEngineAt(int deviceIndex)
{
if (deviceIndex >= m_deviceEngineReferences.size()) {
return;
}
if (m_deviceEngineReferences[deviceIndex].m_deviceEngineType == 0) // source
{
DSPDeviceSourceEngine *deviceEngine = m_deviceEngineReferences[deviceIndex].m_deviceSourceEngine;
deviceThread = m_deviceEngineReferences[deviceIndex].m_thread;
deviceThread->exit();
m_deviceEngineReferences[deviceIndex].m_thread->exit();
m_deviceSourceEngines.removeAll(deviceEngine);
}
else if (m_deviceEngineReferences[deviceIndex].m_deviceEngineType == 1) // sink
{
DSPDeviceSinkEngine *deviceEngine = m_deviceEngineReferences[deviceIndex].m_deviceSinkEngine;
deviceThread = m_deviceEngineReferences[deviceIndex].m_thread;
deviceThread->exit();
m_deviceEngineReferences[deviceIndex].m_thread->exit();
m_deviceSinkEngines.removeAll(deviceEngine);
}
else if (m_deviceEngineReferences[deviceIndex].m_deviceEngineType == 2) // MIMO
{
DSPDeviceMIMOEngine *deviceEngine = m_deviceEngineReferences[deviceIndex].m_deviceMIMOEngine;
deviceThread = m_deviceEngineReferences[deviceIndex].m_thread;
deviceThread->exit();
m_deviceEngineReferences[deviceIndex].m_thread->exit();
m_deviceMIMOEngines.removeAll(deviceEngine);
}
m_deviceEngineReferences.removeAt(deviceIndex);
return deviceThread;
}
void DSPEngine::createFFTFactory(const QString& fftWisdomFileName)