mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-22 22:40:02 +02:00
resolved client side memory leak caused from gui
This commit is contained in:
parent
24b9402e52
commit
cdd18182a8
@ -4573,7 +4573,7 @@ int* multiSlsDetector::readFrameFromReceiver(char* fName, int &fIndex){
|
||||
int n,complete=OK;
|
||||
int i,k,offsetX, offsetY, maxX, maxY; double dr;
|
||||
int* retval=new int[nel];
|
||||
int *retdet, *p=retval;
|
||||
int *retdet = NULL, *p=retval;
|
||||
string fullFName="";
|
||||
string ext="";
|
||||
|
||||
@ -4585,22 +4585,21 @@ int* multiSlsDetector::readFrameFromReceiver(char* fName, int &fIndex){
|
||||
|
||||
for (int id=0; id<thisMultiDetector->numberOfDetectors; id++) {
|
||||
if (detectors[id]) {
|
||||
n=detectors[id]->getDataBytes();
|
||||
retdet=detectors[id]->readFrameFromReceiver(fName,fIndex);
|
||||
if(detectors[id]->getErrorMask())
|
||||
setErrorMask(getErrorMask()|(1<<id));
|
||||
if (retdet){
|
||||
if (fIndex==-1)
|
||||
if (fIndex==-1){
|
||||
complete = FAIL;
|
||||
else{
|
||||
delete [] retdet;
|
||||
}else{
|
||||
n=detectors[id]->getDataBytes();
|
||||
if(getDetectorsType() == EIGER){
|
||||
//cout << "fname:"<<fName<<" findex:"<<fIndex<<endl;
|
||||
//cout<<"n:"<<n<<endl;
|
||||
//cout<<"maxchan:"<<detectors[id]->getMaxNumberOfChannels()<<" n:"<<n<<endl;
|
||||
//cout << "fname:"<<fName<<" findex:"<<fIndex<<endl;//cout<<"n:"<<n<<endl;//cout<<"maxchan:"<<detectors[id]->getMaxNumberOfChannels()<<" n:"<<n<<endl;
|
||||
dr = (double)n/detectors[id]->getMaxNumberOfChannels();
|
||||
//cout << "dr:"<<dr<<endl;
|
||||
k=(int)(detectors[id]->getMaxNumberOfChannels(X)*dr);//bit mode
|
||||
//cout << "k:"<<k<<endl;
|
||||
//cout << "dr:"<<dr<<endl;//cout << "k:"<<k<<endl;
|
||||
offsetY = (int)(((maxY - (thisMultiDetector->offsetY[id] + detectors[id]->getMaxNumberOfChannels(Y))) * maxX)*dr);//bit mode
|
||||
offsetX = (int)(thisMultiDetector->offsetX[id]*dr);
|
||||
//cout << "offsetY"<<offsetY<< " offsetX:"<<offsetX<<endl;
|
||||
@ -4612,6 +4611,7 @@ int* multiSlsDetector::readFrameFromReceiver(char* fName, int &fIndex){
|
||||
memcpy(p,retdet,n);
|
||||
p+=n/sizeof(int);
|
||||
}
|
||||
|
||||
delete [] retdet;
|
||||
//concatenate filenames
|
||||
if(!fullFName.length()){
|
||||
|
@ -9,7 +9,10 @@
|
||||
#include <stdlib.h>
|
||||
using namespace std;
|
||||
|
||||
int dummyCallback(detectorData* d, int p,void*) {
|
||||
cout << "got data " << p << endl;
|
||||
|
||||
}
|
||||
|
||||
class multiSlsDetectorClient {
|
||||
|
||||
@ -21,6 +24,7 @@ class multiSlsDetectorClient {
|
||||
if (argc==0 && action==slsDetectorDefs::READOUT_ACTION) { \
|
||||
if (myDetector==NULL) { \
|
||||
myDetector=new multiSlsDetector(); \
|
||||
//myDetector->registerDataCallback(&dummyCallback, NULL);
|
||||
del=1; \
|
||||
};
|
||||
myCmd=new multiSlsDetectorCommand(myDetector); \
|
||||
|
@ -6461,34 +6461,31 @@ int* slsDetector::readFrameFromReceiver(char* fName, int &fIndex){
|
||||
std::cout<< "slsDetector: Reading frame from receiver "<< thisDetector->dataBytes << " " <<nel <<std::endl;
|
||||
#endif
|
||||
if (connectData() == OK){
|
||||
//if(!thisDetector->stoppedFlag){
|
||||
dataSocket->SendDataOnly(&fnum,sizeof(fnum));
|
||||
dataSocket->ReceiveDataOnly(&ret,sizeof(ret));
|
||||
dataSocket->SendDataOnly(&fnum,sizeof(fnum));
|
||||
dataSocket->ReceiveDataOnly(&ret,sizeof(ret));
|
||||
|
||||
if (ret==FAIL) {
|
||||
n= dataSocket->ReceiveDataOnly(mess,sizeof(mess));
|
||||
std::cout<< "Detector returned: " << mess << " " << n << std::endl;
|
||||
if (ret==FAIL) {
|
||||
n= dataSocket->ReceiveDataOnly(mess,sizeof(mess));
|
||||
std::cout<< "Detector returned: " << mess << " " << n << std::endl;
|
||||
delete [] retval;
|
||||
dataSocket->Disconnect();
|
||||
return NULL;
|
||||
} else {
|
||||
n=dataSocket->ReceiveDataOnly(fName,MAX_STR_LENGTH);
|
||||
n=dataSocket->ReceiveDataOnly(&fIndex,sizeof(fIndex));
|
||||
n=dataSocket->ReceiveDataOnly(retval,thisDetector->dataBytes);
|
||||
|
||||
#ifdef VERBOSE
|
||||
std::cout<< "Received "<< n << " data bytes" << std::endl;
|
||||
#endif
|
||||
if (n!=thisDetector->dataBytes) {
|
||||
std::cout<<endl<< "wrong data size received: received " << n << " but expected from receiver " << thisDetector->dataBytes << std::endl;
|
||||
ret=FAIL;
|
||||
delete [] retval;
|
||||
dataSocket->Disconnect();
|
||||
return NULL;
|
||||
} else {
|
||||
n=dataSocket->ReceiveDataOnly(fName,MAX_STR_LENGTH);
|
||||
n=dataSocket->ReceiveDataOnly(&fIndex,sizeof(fIndex));
|
||||
n=dataSocket->ReceiveDataOnly(retval,thisDetector->dataBytes);
|
||||
|
||||
#ifdef VERBOSE
|
||||
std::cout<< "Received "<< n << " data bytes" << std::endl;
|
||||
#endif
|
||||
if (n!=thisDetector->dataBytes) {
|
||||
std::cout<<endl<< "wrong data size received: received " << n << " but expected from receiver " << thisDetector->dataBytes << std::endl;
|
||||
ret=FAIL;
|
||||
delete [] retval;
|
||||
dataSocket->Disconnect();
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
//}
|
||||
|
||||
}
|
||||
dataSocket->Disconnect();
|
||||
}
|
||||
}
|
||||
|
@ -475,10 +475,10 @@ void* postProcessing::processData(int delflag) {
|
||||
}
|
||||
|
||||
if (fdata) {
|
||||
cout << "delete fdata "<< endl;
|
||||
//cout << "delete fdata "<< endl;
|
||||
delete [] fdata;
|
||||
|
||||
cout << "delete done "<< endl;
|
||||
fdata = NULL;
|
||||
//cout << "delete done "<< endl;
|
||||
}
|
||||
}
|
||||
//receiver
|
||||
@ -535,6 +535,8 @@ void* postProcessing::processData(int delflag) {
|
||||
#ifdef VERY_VERY_DEBUG
|
||||
cout << "currentfIndex:" << currentfIndex << endl;
|
||||
#endif
|
||||
|
||||
|
||||
/** IF detector acquisition is done, let the acquire() thread know to finish up and force join thread */
|
||||
if(acquiringDone > 0){
|
||||
#ifdef VERY_VERY_DEBUG
|
||||
@ -579,6 +581,7 @@ void* postProcessing::processData(int delflag) {
|
||||
//get data
|
||||
strcpy(currentfName,"");
|
||||
pthread_mutex_lock(&mg);
|
||||
//int* receiverData = new int [getTotalNumberOfChannels()];
|
||||
int* receiverData = readFrameFromReceiver(currentfName,currentfIndex);
|
||||
pthread_mutex_unlock(&mg);
|
||||
|
||||
@ -599,7 +602,13 @@ void* postProcessing::processData(int delflag) {
|
||||
}*/
|
||||
|
||||
//not garbage frame
|
||||
if (currentfIndex >= 0) {
|
||||
if(currentfIndex < 0){
|
||||
#ifdef VERY_VERY_DEBUG
|
||||
cout<<"****Detector returned mismatched indices/garbage or acquisition is over. Trying again.***"<<endl;
|
||||
#endif
|
||||
if(receiverData)
|
||||
delete [] receiverData;
|
||||
}else{
|
||||
#ifdef VERY_VERY_DEBUG
|
||||
cout<<"GOT data"<<endl;
|
||||
#endif
|
||||
@ -622,11 +631,6 @@ void* postProcessing::processData(int delflag) {
|
||||
#endif
|
||||
}
|
||||
}
|
||||
#ifdef VERY_VERY_DEBUG
|
||||
else{
|
||||
cout<<"****Detector returned mismatched indices/garbage or acquisition is over. Trying again.***"<<endl;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user