1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2024-12-25 04:03:30 -05:00

SDRdaemon: manage data read queue full

This commit is contained in:
f4exb 2018-08-28 14:04:30 +02:00
parent 8196a70753
commit b07277a5e2
2 changed files with 13 additions and 4 deletions

View File

@ -28,7 +28,8 @@ const uint32_t SDRDaemonDataReadQueue::MaxSize = 20;
SDRDaemonDataReadQueue::SDRDaemonDataReadQueue() :
m_dataBlock(0),
m_blockIndex(1),
m_sampleIndex(0)
m_sampleIndex(0),
m_full(false)
{}
SDRDaemonDataReadQueue::~SDRDaemonDataReadQueue()
@ -44,15 +45,22 @@ SDRDaemonDataReadQueue::~SDRDaemonDataReadQueue()
void SDRDaemonDataReadQueue::push(SDRDaemonDataBlock* dataBlock)
{
if (size() > MaxSize)
if (size() >= MaxSize)
{
qWarning("SDRDaemonDataReadQueue::push: queue is full");
m_full = true; // stop filling the queue
SDRDaemonDataBlock *data = m_dataReadQueue.takeLast();
delete data;
}
if (m_full) {
m_full = (size() > MaxSize/2); // do not fill queue again before queue is half size
}
if (!m_full) {
m_dataReadQueue.append(dataBlock);
}
}
SDRDaemonDataBlock* SDRDaemonDataReadQueue::pop()
{
@ -76,7 +84,7 @@ uint32_t SDRDaemonDataReadQueue::size()
void SDRDaemonDataReadQueue::readSample(Sample& s)
{
// initial state
// depletion/repletion state
if (m_dataBlock == 0)
{
if (size() >= MaxSize/2)

View File

@ -46,6 +46,7 @@ private:
SDRDaemonDataBlock *m_dataBlock;
uint32_t m_blockIndex;
uint32_t m_sampleIndex;
bool m_full; //!< full condition was hit
};