fixed bug of crash when changing dr sometimes, latestdata was incorrectly inititalized

This commit is contained in:
Dhanya Maliakal 2016-12-02 08:55:07 +01:00
parent ce086fe79d
commit 28b0897dd7
4 changed files with 62 additions and 39 deletions

View File

@ -539,7 +539,7 @@ class UDPBaseImplementation : protected virtual slsReceiverDefs, public UDPInter
/** Fifo Depth */
uint32_t fifoDepth;
/** enable for flipping data across both axes */
bool flippedData[2];
int flippedData[2];
//***receiver parameters***
/** Maximum Number of Listening Threads/ UDP Ports */

View File

@ -46,8 +46,8 @@ void UDPBaseImplementation::initializeMembers(){
dynamicRange = 16;
tengigaEnable = false;
fifoDepth = 0;
flippedData[0] = false;
flippedData[1] = false;
flippedData[0] = 0;
flippedData[1] = 0;
//***receiver parameters***
status = IDLE;
@ -221,7 +221,7 @@ void UDPBaseImplementation::configure(map<string, string> config_map){
void UDPBaseImplementation::setFlippedData(int axis, int enable){
FILE_LOG(logDEBUG) << __AT__ << " starting";
if(axis<0 || axis>1) return;
flippedData[axis] = enable;
flippedData[axis] = enable==0?0:1;
FILE_LOG(logINFO) << "Flipped Data: " << flippedData[0] << " , " << flippedData[1];
}

View File

@ -320,13 +320,12 @@ int UDPStandardImplementation::setupFifoStructure(){
// fifo depth
uint32_t oldFifoSize = fifoSize;
fifoSize = fifoDepth;
//reduce fifo depth if > 1 numberofJobsPerBuffer
if(fifoSize % numberofJobsPerBuffer)
fifoSize = (fifoSize/numberofJobsPerBuffer)+1;
if(fifoDepth % numberofJobsPerBuffer)
fifoSize = (fifoDepth/numberofJobsPerBuffer)+1;
else
fifoSize = fifoSize/numberofJobsPerBuffer;
fifoSize = fifoDepth/numberofJobsPerBuffer;
//do not rebuild fifo structure if it is the same (oldfifosize differs only for different packetsperframe)
if((oldNumberofJobsPerBuffer == numberofJobsPerBuffer) && (oldFifoSize == fifoSize))
@ -343,7 +342,7 @@ int UDPStandardImplementation::setupFifoStructure(){
//set up fifo structure
for(int i=0;i<numberofListeningThreads;i++){
for(int i=0;i<MAX_NUMBER_OF_LISTENING_THREADS;i++){
//deleting
if(fifoFree[i]){
@ -367,6 +366,10 @@ int UDPStandardImplementation::setupFifoStructure(){
mem0[i] = 0;
}
}
for(int i=0;i<numberofListeningThreads;i++){
//creating
fifoFree[i] = new CircularFifo<char>(fifoSize);
fifo[i] = new CircularFifo<char>(fifoSize);
@ -382,7 +385,7 @@ int UDPStandardImplementation::setupFifoStructure(){
buffer[i]=mem0[i];
while (buffer[i] < (mem0[i]+(bufferSize * numberofJobsPerBuffer + fifoBufferHeaderSize) * (fifoSize-1))) {
//cprintf(BLUE,"fifofree %d: push 0x%p\n",i,(void*)buffer[i]);
/*for(int k=0;k<bufferSize;k=k+4){
/*for(int k=0;k<bufferSize;k=k+10){
sprintf(buffer[i]+fifoBufferHeaderSize+k,"mem%d",i);
}*/
sprintf(buffer[i],"mem%d",i);
@ -647,7 +650,7 @@ int UDPStandardImplementation::setDynamicRange(const uint32_t i){
if(latestData[i]){delete[] latestData[i];latestData[i] = 0;}
}
for(int i=0;i<numberofWriterThreads;i++){
latestData[i] = new char[bufferSize]();
latestData[i] = new char[bufferSize+FILE_FRAME_HEADER_LENGTH]();
}
//restructure fifo
numberofJobsPerBuffer = -1;
@ -704,7 +707,7 @@ int UDPStandardImplementation::setTenGigaEnable(const bool b){
if(latestData[i]){delete[] latestData[i];latestData[i] = 0;}
}
for(int i=0;i<numberofWriterThreads;i++){
latestData[i] = new char[bufferSize]();
latestData[i] = new char[bufferSize+FILE_FRAME_HEADER_LENGTH]();
}
//restructure fifo
@ -1862,7 +1865,7 @@ void UDPStandardImplementation::startDataCallback(){
int len = sprintf(buf,jsonFmt,type,shape, acquisitionIndex, frameIndex, subframeIndex,completeFileName[ithread]);
zmq_send(zmqsocket, buf,len, ZMQ_SNDMORE);
//send data
zmq_send(zmqsocket, latestData[ithread]+FILE_FRAME_HEADER_LENGTH, bufferSize, 0);
zmq_send(zmqsocket, (latestData[ithread]+FILE_FRAME_HEADER_LENGTH), bufferSize, 0);
//start clock after sending
if(!frameToGuiFrequency){
randomSendNow = false;
@ -2507,6 +2510,7 @@ void UDPStandardImplementation::startWriting(){
else
fifo[0]->pop(wbuf);
uint32_t numPackets = (uint32_t)(*((uint32_t*)wbuf));
#ifdef DEBUG4
cprintf(GREEN,"Writing_Thread %d: Number of Packets: %d for FIFO %d\n", ithread, numPackets, dataCompressionEnable?0:ithread);
#endif
@ -2880,7 +2884,7 @@ void UDPStandardImplementation::handleCompleteFramesOnly(int ithread, char* wbuf
if((fileWriteEnable) && (sfilefd[ithread])){
if(tempframenumber && (tempframenumber%maxFramesPerFile) == 0)
createNewFile(ithread);
fwrite(wbuffer + HEADER_SIZE_NUM_TOT_PACKETS, 1, bufferSize + FILE_FRAME_HEADER_LENGTH, sfilefd[ithread]);
fwrite(wbuffer + HEADER_SIZE_NUM_TOT_PACKETS, 1, (bufferSize + FILE_FRAME_HEADER_LENGTH), sfilefd[ithread]);
}
@ -3140,6 +3144,7 @@ void UDPStandardImplementation::copyFrameToGui(int ithread, char* buffer, uint32
//copy date
guiNumPackets[ithread] = numpackets;
strcpy(guiFileName[ithread],completeFileName[ithread]);
if(excludeMissingPackets) //copy also the header
memcpy(latestData[ithread],buffer+HEADER_SIZE_NUM_TOT_PACKETS, bufferSize + FILE_FRAME_HEADER_LENGTH);
else //copy only the data

View File

@ -355,8 +355,9 @@ int slsReceiverTCPIPInterface::set_detector_type(){
sprintf(mess,"Receiver locked by %s\n", mySock->lastClientIP);
ret=FAIL;
}
else if((receiverBase)&&(receiverBase->getStatus()==RUNNING || receiverBase->getStatus()==TRANSMITTING)){
else if((receiverBase)&&(receiverBase->getStatus()!= IDLE)){
strcpy(mess,"Can not set detector type while receiver not idle\n");
cprintf(RED,"%s",mess);
ret = FAIL;
}
else{
@ -447,8 +448,9 @@ int slsReceiverTCPIPInterface::set_file_name() {
strcpy(mess,SET_RECEIVER_ERR_MESSAGE);
ret=FAIL;
}
else if(receiverBase->getStatus()==RUNNING || receiverBase->getStatus()==TRANSMITTING){
else if(receiverBase->getStatus()!= IDLE){
strcpy(mess,"Can not set file name while receiver not idle\n");
cprintf(RED,"%s",mess);
ret = FAIL;
}
else{
@ -519,8 +521,9 @@ int slsReceiverTCPIPInterface::set_file_dir() {
strcpy(mess,SET_RECEIVER_ERR_MESSAGE);
ret=FAIL;
}
else if(receiverBase->getStatus()==RUNNING || receiverBase->getStatus()==TRANSMITTING){
else if(receiverBase->getStatus()!= IDLE){
strcpy(mess,"Can not set file path while receiver not idle\n");
cprintf(RED,"%s",mess);
ret = FAIL;
}
else{
@ -592,8 +595,9 @@ int slsReceiverTCPIPInterface::set_file_index() {
strcpy(mess,SET_RECEIVER_ERR_MESSAGE);
ret=FAIL;
}
else if(receiverBase->getStatus()==RUNNING || receiverBase->getStatus()==TRANSMITTING){
else if(receiverBase->getStatus()!= IDLE){
strcpy(mess,"Can not set file index while receiver not idle\n");
cprintf(RED,"%s",mess);
ret = FAIL;
}
else{
@ -660,8 +664,9 @@ int slsReceiverTCPIPInterface::set_frame_index() {
strcpy(mess,SET_RECEIVER_ERR_MESSAGE);
ret=FAIL;
}
else if(receiverBase->getStatus()==RUNNING || receiverBase->getStatus()==TRANSMITTING){
else if(receiverBase->getStatus()!= IDLE){
strcpy(mess,"Can not set frame index while receiver not idle\n");
cprintf(RED,"%s",mess);
ret = FAIL;
}
else{
@ -741,8 +746,9 @@ int slsReceiverTCPIPInterface::setup_udp(){
strcpy(mess,SET_RECEIVER_ERR_MESSAGE);
ret=FAIL;
}
else if(receiverBase->getStatus()==RUNNING || receiverBase->getStatus()==TRANSMITTING){
else if(receiverBase->getStatus()!= IDLE){
strcpy(mess,"Can not set up udp while receiver not idle\n");
cprintf(RED,"%s",mess);
ret = FAIL;
}
else{
@ -836,6 +842,7 @@ int slsReceiverTCPIPInterface::start_receiver(){
ret=receiverBase->startReceiver(mess);
else{
sprintf(mess,"Cannot start Receiver as it is in %s state\n",runStatusType(s).c_str());
cprintf(RED,"%s",mess);
ret=FAIL;
}
}
@ -875,7 +882,7 @@ int slsReceiverTCPIPInterface::stop_receiver(){
ret=FAIL;
}
else{
if(receiverBase->getStatus()==RUNNING || receiverBase->getStatus()==TRANSMITTING || receiverBase->getStatus()==RUN_FINISHED){
if(receiverBase->getStatus()!= IDLE){
receiverBase->stopReceiver();
}
s = receiverBase->getStatus();
@ -883,6 +890,7 @@ int slsReceiverTCPIPInterface::stop_receiver(){
ret = OK;
else{
sprintf(mess,"Could not stop receiver. It is in %s state\n",runStatusType(s).c_str());
cprintf(RED,"%s",mess);
ret = FAIL;
}
}
@ -1079,8 +1087,9 @@ int slsReceiverTCPIPInterface::set_short_frame() {
strcpy(mess,SET_RECEIVER_ERR_MESSAGE);
ret=FAIL;
}
else if(receiverBase->getStatus()==RUNNING || receiverBase->getStatus()==TRANSMITTING){
else if(receiverBase->getStatus()!= IDLE){
strcpy(mess,"Cannot set short frame while status is running\n");
cprintf(RED,"%s",mess);
ret=FAIL;
}
else{
@ -2096,7 +2105,7 @@ int slsReceiverTCPIPInterface::set_read_frequency(){
strcpy(mess,SET_RECEIVER_ERR_MESSAGE);
ret=FAIL;
}
else if(receiverBase->getStatus()==RUNNING || receiverBase->getStatus()==TRANSMITTING){
else if(receiverBase->getStatus()!= IDLE){
strcpy(mess,"Can not set receiver frequency mode while receiver not idle\n");
cprintf(RED,"%s\n",mess);
ret = FAIL;
@ -2166,7 +2175,7 @@ int slsReceiverTCPIPInterface::set_read_receiver_timer(){
strcpy(mess,SET_RECEIVER_ERR_MESSAGE);
ret=FAIL;
}
else if(receiverBase->getStatus()==RUNNING || receiverBase->getStatus()==TRANSMITTING){
else if(receiverBase->getStatus()!= IDLE){
strcpy(mess,"Can not set receiver frequency mode while receiver not idle\n");
cprintf(RED,"%s\n",mess);
ret = FAIL;
@ -2230,7 +2239,7 @@ int slsReceiverTCPIPInterface::set_data_stream_enable(){
strcpy(mess,SET_RECEIVER_ERR_MESSAGE);
ret=FAIL;
}
else if((index >= 0) && (receiverBase->getStatus()==RUNNING || receiverBase->getStatus()==TRANSMITTING)){
else if((index >= 0) && (receiverBase->getStatus()!= IDLE)){
strcpy(mess,"Can not set data stream enable while receiver not idle\n");
cprintf(RED,"%s\n",mess);
ret = FAIL;
@ -2294,8 +2303,9 @@ int slsReceiverTCPIPInterface::enable_file_write(){
strcpy(mess,SET_RECEIVER_ERR_MESSAGE);
ret=FAIL;
}
else if(receiverBase->getStatus()==RUNNING || receiverBase->getStatus()==TRANSMITTING){
else if(receiverBase->getStatus()!= IDLE){
strcpy(mess,"Can not set file write mode while receiver not idle\n");
cprintf(RED,"%s",mess);
ret = FAIL;
}
else{
@ -2370,7 +2380,7 @@ int slsReceiverTCPIPInterface::start_readout(){cprintf(BLUE,"In start readout!\n
strcpy(mess,SET_RECEIVER_ERR_MESSAGE);
ret=FAIL;
}
/*else if(receiverBase->getStatus()==RUNNING || receiverBase->getStatus()==TRANSMITTING){
/*else if(receiverBase->getStatus()!= IDLE){
strcpy(mess,"Can not start receiver readout while receiver not idle\n");
ret = FAIL;
}*/
@ -2430,8 +2440,9 @@ int slsReceiverTCPIPInterface::set_timer() {
strcpy(mess,SET_RECEIVER_ERR_MESSAGE);
ret=FAIL;
}
else if(receiverBase->getStatus()==RUNNING || receiverBase->getStatus()==TRANSMITTING){
else if(receiverBase->getStatus()!= IDLE){
strcpy(mess,"Can not set timer while receiver not idle\n");
cprintf(RED,"%s",mess);
ret = FAIL;
}
else{
@ -2518,8 +2529,9 @@ int slsReceiverTCPIPInterface::enable_compression() {
strcpy(mess,SET_RECEIVER_ERR_MESSAGE);
ret=FAIL;
}
else if(receiverBase->getStatus()==RUNNING || receiverBase->getStatus()==TRANSMITTING){
else if(receiverBase->getStatus()!= IDLE){
strcpy(mess,"Cannot enable/disable compression while status is running\n");
cprintf(RED,"%s",mess);
ret=FAIL;
}
else{
@ -2587,8 +2599,9 @@ int slsReceiverTCPIPInterface::set_detector_hostname() {
strcpy(mess,SET_RECEIVER_ERR_MESSAGE);
ret=FAIL;
}
else if(receiverBase->getStatus()==RUNNING || receiverBase->getStatus()==TRANSMITTING){
else if(receiverBase->getStatus()!= IDLE){
strcpy(mess,"Can not set detector hostname while receiver not idle\n");
cprintf(RED,"%s",mess);
ret = FAIL;
}
else{
@ -2673,8 +2686,9 @@ int slsReceiverTCPIPInterface::set_dynamic_range() {
strcpy(mess,SET_RECEIVER_ERR_MESSAGE);
ret=FAIL;
}
else if(receiverBase->getStatus()==RUNNING || receiverBase->getStatus()==TRANSMITTING){
else if(receiverBase->getStatus()!= IDLE){
strcpy(mess,"Can not set dynamic range while receiver not idle\n");
cprintf(RED,"%s",mess);
ret = FAIL;
}
else{
@ -2754,8 +2768,9 @@ int slsReceiverTCPIPInterface::enable_overwrite() {
strcpy(mess,SET_RECEIVER_ERR_MESSAGE);
ret=FAIL;
}
else if(receiverBase->getStatus()==RUNNING || receiverBase->getStatus()==TRANSMITTING){
else if(receiverBase->getStatus()!= IDLE){
strcpy(mess,"Can not set overwrite mode while receiver not idle\n");
cprintf(RED,"%s",mess);
ret = FAIL;
}
else{
@ -2821,8 +2836,9 @@ int slsReceiverTCPIPInterface::enable_tengiga() {
strcpy(mess,SET_RECEIVER_ERR_MESSAGE);
ret=FAIL;
}
else if(receiverBase->getStatus()==RUNNING || receiverBase->getStatus()==TRANSMITTING){
else if(receiverBase->getStatus()!= IDLE){
strcpy(mess,"Can not set up 1Giga/10Giga mode while receiver not idle\n");
cprintf(RED,"%s",mess);
ret = FAIL;
}
else{
@ -2890,8 +2906,9 @@ int slsReceiverTCPIPInterface::set_fifo_depth() {
strcpy(mess,SET_RECEIVER_ERR_MESSAGE);
ret=FAIL;
}
else if(receiverBase->getStatus()==RUNNING || receiverBase->getStatus()==TRANSMITTING){
else if(receiverBase->getStatus()!= IDLE){
strcpy(mess,"Cannot set/get fifo depth while status is running\n");
cprintf(RED,"%s",mess);
ret=FAIL;
}
else{
@ -3033,8 +3050,9 @@ int slsReceiverTCPIPInterface::set_flipped_data(){
strcpy(mess,SET_RECEIVER_ERR_MESSAGE);
ret=FAIL;
}
else if(receiverBase->getStatus()==RUNNING || receiverBase->getStatus()==TRANSMITTING){
else if(receiverBase->getStatus()!= IDLE){
strcpy(mess,"Can not set flipped data while receiver not idle\n");
cprintf(RED,"%s",mess);
ret = FAIL;
}
else{