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 */
void closeFile(int p);
/** Static function to call closeFile */
static void staticCloseFile(int p);
/** gets version */
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);
// made static to close thread files with ctrl+c
static slsReceiver* receiver;
//receiver object
slsReceiver* receiver;
};

View File

@ -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";

View File

@ -6,25 +6,38 @@
#include <iostream>
#include <string.h>
#include <signal.h> //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;
}

View File

@ -29,6 +29,9 @@ slsReceiver::slsReceiver(int argc, char *argv[], int &success){
* @return
*/
udp_interface = NULL;
tcpipInterface = NULL;
//creating base receiver
map<string, string> 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);

View File

@ -9,10 +9,7 @@
#include "slsReceiverUsers.h"
#include "slsReceiver.h"
#include <signal.h> //SIGINT
#include <stdlib.h> //EXIT
#include <iostream>
#include <string>
#include <sstream>
@ -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"<<endl;
cout << "Shutting down UDP Socket" << endl;
if(receiverBase){
receiverBase->shutDownUDPSockets();
cout << "Closing Files... " << endl;
receiverBase->closeFile();
}
killTCPServerThread = 1;
socket->ShutDownSocket();
socket->exitServer();
if(socket) socket->ShutDownSocket();
cout<<"Socket closed"<<endl;
void* status;
pthread_join(TCPServer_thread, &status);
pthread_join(TCPServer_thread, NULL);
killTCPServerThread = 0;
cout<<"Threads joined"<<endl;
}
@ -347,13 +319,7 @@ int slsReceiverTCPIPInterface::M_nofunc(){
void slsReceiverTCPIPInterface::closeFile(int p){
stop();
cout << "Goodbye!" << endl;
exit(-1);
}
void slsReceiverTCPIPInterface::staticCloseFile(int p){
slsReceiverUsers::receiver->closeFile(p);
receiverBase->closeFile();
}

View File

@ -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);
}