1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2024-09-30 16:56:35 -04:00

SDRdaemon: fixed core dump

This commit is contained in:
f4exb 2018-08-21 17:23:48 +02:00
parent 157a77835e
commit 84178789e4
2 changed files with 38 additions and 9 deletions

View File

@ -110,13 +110,15 @@ void SDRDaemonChannelSink::feed(const SampleVector::const_iterator& begin, const
metaData.m_tv_sec = tv.tv_sec;
metaData.m_tv_usec = tv.tv_usec;
if (!m_dataBlock) { // on the very first cycle there is no data block allocated
m_dataBlock = new SDRDaemonDataBlock();
}
boost::crc_32_type crc32;
crc32.process_bytes(&metaData, 20);
metaData.m_crc32 = crc32.checksum();
SDRDaemonSuperBlock& superBlock = m_dataBlock->m_superBlocks[0]; // first block
memset((void *) &superBlock, 0, SDRDaemonUdpSize);
superBlock.init();
superBlock.m_header.m_frameIndex = m_frameCount;
superBlock.m_header.m_blockIndex = m_txBlockIndex;
memcpy((void *) &superBlock.m_protectedBlock, (const void *) &metaData, sizeof(SDRDaemonMetaDataFEC));
@ -136,10 +138,6 @@ void SDRDaemonChannelSink::feed(const SampleVector::const_iterator& begin, const
m_currentMetaFEC = metaData;
}
if (!m_dataBlock) {
m_dataBlock = new SDRDaemonDataBlock();
}
m_txBlockIndex = 1; // next Tx block with data
} // block zero

View File

@ -25,6 +25,7 @@
#include <stdint.h>
#include <string.h>
#include <algorithm>
#include "dsp/dsptypes.h"
#define UDPSINKFEC_UDPSIZE 512
@ -51,8 +52,15 @@ struct SDRDaemonMetaDataFEC
void init()
{
memset((void *) this, 0, sizeof(SDRDaemonMetaDataFEC));
m_centerFrequency = 0;
m_sampleRate = 0;
m_sampleBytes = 0;
m_sampleBits = 0;
m_nbOriginalBlocks = 0;
m_nbFECBlocks = -1;
m_tv_sec = 0;
m_tv_usec = 0;
m_crc32 = 0;
}
};
@ -61,6 +69,13 @@ struct SDRDaemonHeader
uint16_t m_frameIndex;
uint8_t m_blockIndex;
uint8_t m_filler;
void init()
{
m_frameIndex = 0;
m_blockIndex = 0;
m_filler = 0;
}
};
static const int SDRDaemonUdpSize = UDPSINKFEC_UDPSIZE;
@ -70,12 +85,22 @@ static const int SDRDaemonSamplesPerBlock = (UDPSINKFEC_UDPSIZE - sizeof(SDRDaem
struct SDRDaemonProtectedBlock
{
Sample m_samples[SDRDaemonSamplesPerBlock];
void init() {
std::fill(m_samples, m_samples+SDRDaemonSamplesPerBlock, Sample{0,0});
}
};
struct SDRDaemonSuperBlock
{
SDRDaemonHeader m_header;
SDRDaemonProtectedBlock m_protectedBlock;
void init()
{
m_header.init();
m_protectedBlock.init();
}
};
#pragma pack(pop)
@ -99,8 +124,14 @@ struct SDRDaemonTxControlBlock
class SDRDaemonDataBlock
{
public:
SDRDaemonDataBlock() {
m_superBlocks = new SDRDaemonSuperBlock[256];
}
~SDRDaemonDataBlock() {
delete[] m_superBlocks;
}
SDRDaemonTxControlBlock m_controlBlock;
SDRDaemonSuperBlock m_superBlocks[256];
SDRDaemonSuperBlock *m_superBlocks;
};
#endif /* SDRDAEMON_CHANNEL_SDRDAEMONDATABLOCK_H_ */