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

Deep redesign: debug session #2 phase #2: fixed multi-threading of channelizers

This commit is contained in:
f4exb
2015-08-21 08:54:28 +02:00
parent 38bc6563d4
commit bc287a4c33
22 changed files with 129 additions and 101 deletions
+12 -27
View File
@@ -131,17 +131,17 @@ void DSPEngine::removeSink(SampleSink* sink)
m_syncMessenger.sendWait(cmd);
}
void DSPEngine::addThreadedSink(SampleSink* sink)
void DSPEngine::addThreadedSink(ThreadedSampleSink* sink)
{
qDebug() << "DSPEngine::addThreadedSink: " << sink->objectName().toStdString().c_str();
DSPAddThreadedSink cmd(sink);
DSPAddThreadedSampleSink cmd(sink);
m_syncMessenger.sendWait(cmd);
}
void DSPEngine::removeThreadedSink(SampleSink* sink)
void DSPEngine::removeThreadedSink(ThreadedSampleSink* sink)
{
qDebug() << "DSPEngine::removeThreadedSink: " << sink->objectName().toStdString().c_str();
DSPRemoveThreadedSink cmd(sink);
DSPRemoveThreadedSampleSink cmd(sink);
m_syncMessenger.sendWait(cmd);
}
@@ -418,7 +418,7 @@ DSPEngine::State DSPEngine::gotoInit()
for (ThreadedSampleSinks::const_iterator it = m_threadedSampleSinks.begin(); it != m_threadedSampleSinks.end(); ++it)
{
qDebug() << " - initializing ThreadedSampleSink(" << (*it)->getSampleSinkObjectName().toStdString().c_str() << ")";
(*it)->sendWaitSink(notif);
(*it)->handleSinkMessage(notif);
}
// pass data to listeners
@@ -580,32 +580,17 @@ void DSPEngine::handleSynchronousMessages()
m_sampleSinks.remove(sink);
}
else if (DSPAddThreadedSink::match(*message))
else if (DSPAddThreadedSampleSink::match(*message))
{
SampleSink* sink = ((DSPAddThreadedSink*) message)->getSampleSink();
ThreadedSampleSink *threadedSink = new ThreadedSampleSink(sink);
ThreadedSampleSink *threadedSink = ((DSPAddThreadedSampleSink*) message)->getThreadedSampleSink();
m_threadedSampleSinks.push_back(threadedSink);
threadedSink->start();
}
else if (DSPRemoveThreadedSink::match(*message))
else if (DSPRemoveThreadedSampleSink::match(*message))
{
SampleSink* sink = ((DSPRemoveThreadedSink*) message)->getSampleSink();
ThreadedSampleSinks::iterator threadedSinkIt = m_threadedSampleSinks.begin();
for (; threadedSinkIt != m_threadedSampleSinks.end(); ++threadedSinkIt)
{
if ((*threadedSinkIt)->getSink() == sink)
{
break;
}
}
if (threadedSinkIt != m_threadedSampleSinks.end())
{
(*threadedSinkIt)->stop();
m_threadedSampleSinks.remove(*threadedSinkIt);
delete (*threadedSinkIt);
}
ThreadedSampleSink* threadedSink = ((DSPRemoveThreadedSampleSink*) message)->getThreadedSampleSink();
threadedSink->stop();
m_threadedSampleSinks.remove(threadedSink);
}
else if (DSPAddAudioSink::match(*message))
{
@@ -684,7 +669,7 @@ void DSPEngine::handleSourceMessages()
for (ThreadedSampleSinks::const_iterator it = m_threadedSampleSinks.begin(); it != m_threadedSampleSinks.end(); ++it)
{
qDebug() << "DSPEngine::handleSourceMessages: forward message to ThreadedSampleSink(" << (*it)->getSampleSinkObjectName().toStdString().c_str() << ")";
(*it)->sendWaitSink(*message);
(*it)->handleSinkMessage(*message);
}
// forward changes to listeners on DSP output queue