put in the changes by Andrea to make it as static and remove as many destructors bugs

This commit is contained in:
Dhanya Maliakal
2015-11-02 17:33:10 +01:00
parent f77b78b5c6
commit e9f51e2ef5
7 changed files with 46 additions and 76 deletions

View File

@ -54,9 +54,6 @@ class slsReceiverTCPIPInterface : private virtual slsReceiverDefs {
/** Close all threaded Files and exit */ /** Close all threaded Files and exit */
void closeFile(int p); void closeFile(int p);
/** Static function to call closeFile */
static void staticCloseFile(int p);
/** gets version */ /** gets version */
int64_t getReceiverVersion(); int64_t getReceiverVersion();

View File

@ -83,8 +83,8 @@ public:
void registerCallBackRawDataReady(void (*func)(int framenumber, char* datapointer, int datasize, FILE* filedescriptor, char* guidatapointer, void*),void *arg); 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 //receiver object
static slsReceiver* receiver; slsReceiver* receiver;
}; };

View File

@ -60,7 +60,7 @@ UDPStandardImplementation::UDPStandardImplementation(){
UDPStandardImplementation::~UDPStandardImplementation(){ UDPStandardImplementation::~UDPStandardImplementation(){
FILE_LOG(logDEBUG1) << __AT__ << " called"; FILE_LOG(logDEBUG1) << __AT__ << " called";
closeFile();
deleteMembers(); deleteMembers();
} }
@ -1184,9 +1184,9 @@ void UDPStandardImplementation::setThreadPriorities(){
if (pthread_setschedparam(pthread_self(),5 , &tcp_param) == EPERM) if (pthread_setschedparam(pthread_self(),5 , &tcp_param) == EPERM)
rights = false; rights = false;
if(!rights) if(!rights){
FILE_LOG(logWARNING) << "No root permission to prioritize threads."; FILE_LOG(logWARNING) << "No root permission to prioritize threads.";
}
} }
@ -1256,8 +1256,9 @@ int UDPStandardImplementation::setupWriter(){
if(cbAction < DO_EVERYTHING){ if(cbAction < DO_EVERYTHING){
FILE_LOG(logINFO) << "Call back activated. Data saving must be taken care of by user in call back."; 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"; FILE_LOG(logINFO) << "Data Write has been defined externally";
}
}else if(!fileWriteEnable) }else if(!fileWriteEnable)
FILE_LOG(logINFO) << "Data will not be saved"; FILE_LOG(logINFO) << "Data will not be saved";

View File

@ -6,25 +6,38 @@
#include <iostream> #include <iostream>
#include <string.h> #include <string.h>
#include <signal.h> //SIGINT
#include "utilities.h" #include "utilities.h"
#include "logger.h" #include "logger.h"
using namespace std; 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[]) { int main(int argc, char *argv[]) {
//Catch signal SIGINT to close files properly
signal(SIGINT,closeFile);
int ret = slsReceiverDefs::OK; int ret = slsReceiverDefs::OK;
receiver = new slsReceiverUsers(argc, argv, ret);
slsReceiverUsers *user = new slsReceiverUsers(argc, argv, ret); if(ret==slsReceiverDefs::FAIL){
deleteReceiver(receiver);
if(ret==slsReceiverDefs::FAIL)
return -1; return -1;
}
//register callbacks //register callbacks
/** /**
callback arguments are callback arguments are
filepath filepath
@ -37,10 +50,8 @@ int main(int argc, char *argv[]) {
1 callback writes file, we have to open, close it 1 callback writes file, we have to open, close it
2 we open, close, write file, callback does not do anything 2 we open, close, write file, callback does not do anything
registerCallBackStartAcquisition(int (*func)(char*, char*,int, int, void*),void *arg); registerCallBackStartAcquisition(int (*func)(char*, char*,int, int, void*),void *arg);
*/ */
//receiver->registerCallBackStartAcquisition(func,arg); //receiver->registerCallBackStartAcquisition(func,arg);
@ -49,32 +60,25 @@ int main(int argc, char *argv[]) {
total farmes caught total farmes caught
registerCallBackAcquisitionFinished(void (*func)(int, void*),void *arg); registerCallBackAcquisitionFinished(void (*func)(int, void*),void *arg);
*/ */
//receiver->registerCallBackAcquisitionFinished(func,arg); //receiver->registerCallBackAcquisitionFinished(func,arg);
/** /**
args to raw data ready callback are args to raw data ready callback are
framenum framenum
datapointer datapointer
file descriptor file descriptor
guidatapointer (NULL, no data required) guidatapointer (NULL, no data required)
NEVER DELETE THE DATA POINTER NEVER DELETE THE DATA POINTER
REMEMBER THAT THE CALLBACK IS BLOCKING REMEMBER THAT THE CALLBACK IS BLOCKING
registerCallBackRawDataReady(void (*func)(int, char*, FILE*, char*, void*),void *arg); registerCallBackRawDataReady(void (*func)(int, char*, FILE*, char*, void*),void *arg);
*/ */
//receiver->registerCallBackRawDataReady(func,arg); //receiver->registerCallBackRawDataReady(func,arg);
//start tcp server thread //start tcp server thread
if(user->start() == slsReceiverDefs::OK){ if(receiver->start() == slsReceiverDefs::OK){
FILE_LOG(logDEBUG1) << "DONE!" << endl; FILE_LOG(logDEBUG1) << "DONE!" << endl;
string str; string str;
cin>>str; cin>>str;
@ -82,10 +86,10 @@ int main(int argc, char *argv[]) {
while(str.find("exit") == string::npos) while(str.find("exit") == string::npos)
cin>>str; cin>>str;
//stop tcp server thread, stop udp socket //stop tcp server thread, stop udp socket
user->stop(); receiver->stop();
} }
delete user; deleteReceiver(receiver);
cout << "Goodbye!" << endl; cout << "Goodbye!" << endl;
return 0; return 0;
} }

View File

@ -29,6 +29,9 @@ slsReceiver::slsReceiver(int argc, char *argv[], int &success){
* @return * @return
*/ */
udp_interface = NULL;
tcpipInterface = NULL;
//creating base receiver //creating base receiver
map<string, string> configuration_map; map<string, string> configuration_map;
int tcpip_port_no = 1954; int tcpip_port_no = 1954;
@ -55,7 +58,8 @@ slsReceiver::slsReceiver(int argc, char *argv[], int &success){
}; };
/* getopt_long stores the option index here. */ /* getopt_long stores the option index here. */
int option_index = 0; int option_index = 0;
int c; int c=0;
optind = 1;
while ( c != -1 ){ while ( c != -1 ){
c = getopt_long (argc, argv, "mbfhtr", long_options, &option_index); c = getopt_long (argc, argv, "mbfhtr", long_options, &option_index);

View File

@ -9,10 +9,7 @@
#include "slsReceiverUsers.h" #include "slsReceiverUsers.h"
#include "slsReceiver.h" #include "slsReceiver.h"
#include <signal.h> //SIGINT
#include <stdlib.h> //EXIT #include <stdlib.h> //EXIT
#include <iostream> #include <iostream>
#include <string> #include <string>
#include <sstream> #include <sstream>
@ -27,9 +24,8 @@ using namespace std;
slsReceiverTCPIPInterface::~slsReceiverTCPIPInterface() { slsReceiverTCPIPInterface::~slsReceiverTCPIPInterface() {
closeFile(0); stop();
if(socket) {delete socket; socket=NULL;} if(socket) {delete socket; socket=NULL;}
if(receiverBase) {delete receiverBase; receiverBase=NULL;}
} }
slsReceiverTCPIPInterface::slsReceiverTCPIPInterface(int &success, UDPInterface* rbase, int pn, bool bot): slsReceiverTCPIPInterface::slsReceiverTCPIPInterface(int &success, UDPInterface* rbase, int pn, bool bot):
@ -71,9 +67,6 @@ slsReceiverTCPIPInterface::slsReceiverTCPIPInterface(int &success, UDPInterface*
#ifdef VERBOSE #ifdef VERBOSE
cout << "Function table assigned." << endl; cout << "Function table assigned." << endl;
#endif #endif
//Catch signal SIGINT to close files properly
signal(SIGINT,staticCloseFile);
} }
} }
@ -139,34 +132,13 @@ int slsReceiverTCPIPInterface::start(){
void slsReceiverTCPIPInterface::stop(){ void slsReceiverTCPIPInterface::stop(){
cout << "Shutting down UDP Socket" << endl; cout << "Shutting down UDP Socket" << endl;
if(receiverBase)
receiverBase->shutDownUDPSockets();
cout << "Closing Files... " << endl;
receiverBase->closeFile();
cout<<"Shutting down TCP Socket and TCP thread"<<endl;
cout << "Shutting down UDP Socket" << endl;
if(receiverBase){
receiverBase->shutDownUDPSockets();
cout << "Closing Files... " << endl;
receiverBase->closeFile();
}
killTCPServerThread = 1; killTCPServerThread = 1;
socket->ShutDownSocket(); if(socket) socket->ShutDownSocket();
socket->exitServer();
cout<<"Socket closed"<<endl; cout<<"Socket closed"<<endl;
void* status; pthread_join(TCPServer_thread, NULL);
pthread_join(TCPServer_thread, &status);
killTCPServerThread = 0; killTCPServerThread = 0;
cout<<"Threads joined"<<endl; cout<<"Threads joined"<<endl;
} }
@ -347,13 +319,7 @@ int slsReceiverTCPIPInterface::M_nofunc(){
void slsReceiverTCPIPInterface::closeFile(int p){ void slsReceiverTCPIPInterface::closeFile(int p){
stop(); receiverBase->closeFile();
cout << "Goodbye!" << endl;
exit(-1);
}
void slsReceiverTCPIPInterface::staticCloseFile(int p){
slsReceiverUsers::receiver->closeFile(p);
} }

View File

@ -1,47 +1,45 @@
#include "slsReceiverUsers.h" #include "slsReceiverUsers.h"
#include "slsReceiver.h" #include "slsReceiver.h"
slsReceiver* slsReceiverUsers::receiver(NULL);
slsReceiverUsers::slsReceiverUsers(int argc, char *argv[], int &success) { slsReceiverUsers::slsReceiverUsers(int argc, char *argv[], int &success) {
slsReceiverUsers::receiver=new slsReceiver(argc, argv, success); receiver=new slsReceiver(argc, argv, success);
} }
slsReceiverUsers::~slsReceiverUsers() { slsReceiverUsers::~slsReceiverUsers() {
delete slsReceiverUsers::receiver; delete receiver;
} }
int slsReceiverUsers::start() { int slsReceiverUsers::start() {
return slsReceiverUsers::receiver->start(); return receiver->start();
} }
void slsReceiverUsers::stop() { void slsReceiverUsers::stop() {
slsReceiverUsers::receiver->stop(); receiver->stop();
} }
void slsReceiverUsers::closeFile(int p) { void slsReceiverUsers::closeFile(int p) {
slsReceiverUsers::receiver->closeFile(p); receiver->closeFile(p);
} }
int64_t slsReceiverUsers::getReceiverVersion(){ int64_t slsReceiverUsers::getReceiverVersion(){
return slsReceiverUsers::receiver->getReceiverVersion(); return receiver->getReceiverVersion();
} }
void slsReceiverUsers::registerCallBackStartAcquisition(int (*func)(char*, char*,int, int, void*),void *arg){ 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){ 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){ void slsReceiverUsers::registerCallBackRawDataReady(void (*func)(int, char*, int, FILE*, char*, void*),void *arg){
slsReceiverUsers::receiver->registerCallBackRawDataReady(func,arg); receiver->registerCallBackRawDataReady(func,arg);
} }