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_sec = tv.tv_sec;
metaData.m_tv_usec = tv.tv_usec; 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; boost::crc_32_type crc32;
crc32.process_bytes(&metaData, 20); crc32.process_bytes(&metaData, 20);
metaData.m_crc32 = crc32.checksum(); metaData.m_crc32 = crc32.checksum();
SDRDaemonSuperBlock& superBlock = m_dataBlock->m_superBlocks[0]; // first block SDRDaemonSuperBlock& superBlock = m_dataBlock->m_superBlocks[0]; // first block
superBlock.init();
memset((void *) &superBlock, 0, SDRDaemonUdpSize);
superBlock.m_header.m_frameIndex = m_frameCount; superBlock.m_header.m_frameIndex = m_frameCount;
superBlock.m_header.m_blockIndex = m_txBlockIndex; superBlock.m_header.m_blockIndex = m_txBlockIndex;
memcpy((void *) &superBlock.m_protectedBlock, (const void *) &metaData, sizeof(SDRDaemonMetaDataFEC)); 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; m_currentMetaFEC = metaData;
} }
if (!m_dataBlock) {
m_dataBlock = new SDRDaemonDataBlock();
}
m_txBlockIndex = 1; // next Tx block with data m_txBlockIndex = 1; // next Tx block with data
} // block zero } // block zero

View File

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