From e9f51e2ef59dd2b231c0a38952c4b30adf0c6349 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Mon, 2 Nov 2015 17:33:10 +0100 Subject: [PATCH] put in the changes by Andrea to make it as static and remove as many destructors bugs --- .../include/slsReceiverTCPIPInterface.h | 3 -- .../include/slsReceiverUsers.h | 4 +- .../src/UDPStandardImplementation.cpp | 9 ++-- slsReceiverSoftware/src/main.cpp | 38 +++++++++-------- slsReceiverSoftware/src/slsReceiver.cpp | 6 ++- .../src/slsReceiverTCPIPInterface.cpp | 42 ++----------------- slsReceiverSoftware/src/slsReceiverUsers.cpp | 20 ++++----- 7 files changed, 46 insertions(+), 76 deletions(-) diff --git a/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h b/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h index 83d9416aa..49e5134f1 100644 --- a/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h +++ b/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h @@ -54,9 +54,6 @@ class slsReceiverTCPIPInterface : private virtual slsReceiverDefs { /** Close all threaded Files and exit */ void closeFile(int p); - /** Static function to call closeFile */ - static void staticCloseFile(int p); - /** gets version */ int64_t getReceiverVersion(); diff --git a/slsReceiverSoftware/include/slsReceiverUsers.h b/slsReceiverSoftware/include/slsReceiverUsers.h index 50d6f38fe..eea403560 100644 --- a/slsReceiverSoftware/include/slsReceiverUsers.h +++ b/slsReceiverSoftware/include/slsReceiverUsers.h @@ -83,8 +83,8 @@ public: void registerCallBackRawDataReady(void (*func)(int framenumber, char* datapointer, int datasize, FILE* filedescriptor, char* guidatapointer, void*),void *arg); - // made static to close thread files with ctrl+c - static slsReceiver* receiver; + //receiver object + slsReceiver* receiver; }; diff --git a/slsReceiverSoftware/src/UDPStandardImplementation.cpp b/slsReceiverSoftware/src/UDPStandardImplementation.cpp index 2bafb96b1..6149f0c10 100644 --- a/slsReceiverSoftware/src/UDPStandardImplementation.cpp +++ b/slsReceiverSoftware/src/UDPStandardImplementation.cpp @@ -60,7 +60,7 @@ UDPStandardImplementation::UDPStandardImplementation(){ UDPStandardImplementation::~UDPStandardImplementation(){ FILE_LOG(logDEBUG1) << __AT__ << " called"; - + closeFile(); deleteMembers(); } @@ -1184,9 +1184,9 @@ void UDPStandardImplementation::setThreadPriorities(){ if (pthread_setschedparam(pthread_self(),5 , &tcp_param) == EPERM) rights = false; - if(!rights) + if(!rights){ FILE_LOG(logWARNING) << "No root permission to prioritize threads."; - + } } @@ -1256,8 +1256,9 @@ int UDPStandardImplementation::setupWriter(){ if(cbAction < DO_EVERYTHING){ FILE_LOG(logINFO) << "Call back activated. Data saving must be taken care of by user in call back."; - if (rawDataReadyCallBack) + if (rawDataReadyCallBack){ FILE_LOG(logINFO) << "Data Write has been defined externally"; + } }else if(!fileWriteEnable) FILE_LOG(logINFO) << "Data will not be saved"; diff --git a/slsReceiverSoftware/src/main.cpp b/slsReceiverSoftware/src/main.cpp index 53a8bd110..1dc9a65c6 100644 --- a/slsReceiverSoftware/src/main.cpp +++ b/slsReceiverSoftware/src/main.cpp @@ -6,25 +6,38 @@ #include #include +#include //SIGINT #include "utilities.h" #include "logger.h" - using namespace std; +slsReceiverUsers *receiver; + +void deleteReceiver(slsReceiverUsers* r){ + if(r){delete r;r=0;} +} + +void closeFile(int p){ + deleteReceiver(receiver); +} int main(int argc, char *argv[]) { + + //Catch signal SIGINT to close files properly + signal(SIGINT,closeFile); + int ret = slsReceiverDefs::OK; + receiver = new slsReceiverUsers(argc, argv, ret); - slsReceiverUsers *user = new slsReceiverUsers(argc, argv, ret); - - if(ret==slsReceiverDefs::FAIL) + if(ret==slsReceiverDefs::FAIL){ + deleteReceiver(receiver); return -1; + } //register callbacks - /** callback arguments are filepath @@ -37,10 +50,8 @@ int main(int argc, char *argv[]) { 1 callback writes file, we have to open, close it 2 we open, close, write file, callback does not do anything - registerCallBackStartAcquisition(int (*func)(char*, char*,int, int, void*),void *arg); */ - //receiver->registerCallBackStartAcquisition(func,arg); @@ -49,32 +60,25 @@ int main(int argc, char *argv[]) { total farmes caught registerCallBackAcquisitionFinished(void (*func)(int, void*),void *arg); */ - - //receiver->registerCallBackAcquisitionFinished(func,arg); - /** args to raw data ready callback are framenum datapointer file descriptor guidatapointer (NULL, no data required) - NEVER DELETE THE DATA POINTER REMEMBER THAT THE CALLBACK IS BLOCKING - registerCallBackRawDataReady(void (*func)(int, char*, FILE*, char*, void*),void *arg); - */ - //receiver->registerCallBackRawDataReady(func,arg); //start tcp server thread - if(user->start() == slsReceiverDefs::OK){ + if(receiver->start() == slsReceiverDefs::OK){ FILE_LOG(logDEBUG1) << "DONE!" << endl; string str; cin>>str; @@ -82,10 +86,10 @@ int main(int argc, char *argv[]) { while(str.find("exit") == string::npos) cin>>str; //stop tcp server thread, stop udp socket - user->stop(); + receiver->stop(); } - delete user; + deleteReceiver(receiver); cout << "Goodbye!" << endl; return 0; } diff --git a/slsReceiverSoftware/src/slsReceiver.cpp b/slsReceiverSoftware/src/slsReceiver.cpp index 5783e601c..f23da65c5 100644 --- a/slsReceiverSoftware/src/slsReceiver.cpp +++ b/slsReceiverSoftware/src/slsReceiver.cpp @@ -29,6 +29,9 @@ slsReceiver::slsReceiver(int argc, char *argv[], int &success){ * @return */ + udp_interface = NULL; + tcpipInterface = NULL; + //creating base receiver map configuration_map; int tcpip_port_no = 1954; @@ -55,7 +58,8 @@ slsReceiver::slsReceiver(int argc, char *argv[], int &success){ }; /* getopt_long stores the option index here. */ int option_index = 0; - int c; + int c=0; + optind = 1; while ( c != -1 ){ c = getopt_long (argc, argv, "mbfhtr", long_options, &option_index); diff --git a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp index d7e562f76..24ba62d99 100644 --- a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp +++ b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp @@ -9,10 +9,7 @@ #include "slsReceiverUsers.h" #include "slsReceiver.h" - -#include //SIGINT #include //EXIT - #include #include #include @@ -27,9 +24,8 @@ using namespace std; slsReceiverTCPIPInterface::~slsReceiverTCPIPInterface() { - closeFile(0); + stop(); if(socket) {delete socket; socket=NULL;} - if(receiverBase) {delete receiverBase; receiverBase=NULL;} } slsReceiverTCPIPInterface::slsReceiverTCPIPInterface(int &success, UDPInterface* rbase, int pn, bool bot): @@ -71,9 +67,6 @@ slsReceiverTCPIPInterface::slsReceiverTCPIPInterface(int &success, UDPInterface* #ifdef VERBOSE cout << "Function table assigned." << endl; #endif - - //Catch signal SIGINT to close files properly - signal(SIGINT,staticCloseFile); } } @@ -139,34 +132,13 @@ int slsReceiverTCPIPInterface::start(){ void slsReceiverTCPIPInterface::stop(){ - cout << "Shutting down UDP Socket" << endl; - if(receiverBase) - receiverBase->shutDownUDPSockets(); - - cout << "Closing Files... " << endl; - receiverBase->closeFile(); - - - cout<<"Shutting down TCP Socket and TCP thread"<shutDownUDPSockets(); - - cout << "Closing Files... " << endl; - receiverBase->closeFile(); - } - - killTCPServerThread = 1; - socket->ShutDownSocket(); - socket->exitServer(); + if(socket) socket->ShutDownSocket(); cout<<"Socket closed"<closeFile(p); + receiverBase->closeFile(); } diff --git a/slsReceiverSoftware/src/slsReceiverUsers.cpp b/slsReceiverSoftware/src/slsReceiverUsers.cpp index c27f1efc2..8a1d17f43 100644 --- a/slsReceiverSoftware/src/slsReceiverUsers.cpp +++ b/slsReceiverSoftware/src/slsReceiverUsers.cpp @@ -1,47 +1,45 @@ #include "slsReceiverUsers.h" #include "slsReceiver.h" -slsReceiver* slsReceiverUsers::receiver(NULL); - slsReceiverUsers::slsReceiverUsers(int argc, char *argv[], int &success) { - slsReceiverUsers::receiver=new slsReceiver(argc, argv, success); + receiver=new slsReceiver(argc, argv, success); } slsReceiverUsers::~slsReceiverUsers() { - delete slsReceiverUsers::receiver; + delete receiver; } int slsReceiverUsers::start() { - return slsReceiverUsers::receiver->start(); + return receiver->start(); } void slsReceiverUsers::stop() { - slsReceiverUsers::receiver->stop(); + receiver->stop(); } void slsReceiverUsers::closeFile(int p) { - slsReceiverUsers::receiver->closeFile(p); + receiver->closeFile(p); } int64_t slsReceiverUsers::getReceiverVersion(){ - return slsReceiverUsers::receiver->getReceiverVersion(); + return receiver->getReceiverVersion(); } void slsReceiverUsers::registerCallBackStartAcquisition(int (*func)(char*, char*,int, int, void*),void *arg){ - slsReceiverUsers::receiver->registerCallBackStartAcquisition(func,arg); + receiver->registerCallBackStartAcquisition(func,arg); } void slsReceiverUsers::registerCallBackAcquisitionFinished(void (*func)(int, void*),void *arg){ - slsReceiverUsers::receiver->registerCallBackAcquisitionFinished(func,arg); + receiver->registerCallBackAcquisitionFinished(func,arg); } void slsReceiverUsers::registerCallBackRawDataReady(void (*func)(int, char*, int, FILE*, char*, void*),void *arg){ - slsReceiverUsers::receiver->registerCallBackRawDataReady(func,arg); + receiver->registerCallBackRawDataReady(func,arg); }