From a67f9d50de1e01f9057e849211d6630c2fd19aa2 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Fri, 2 Dec 2016 12:47:01 +0100 Subject: [PATCH] removed the allocating of memory for eiger and jungfrau to receive data via tcp from detector as this will not happen --- .../multiSlsDetector/multiSlsDetector.cpp | 39 +++++++++++-------- .../slsDetector/slsDetector.cpp | 29 +++++++------- 2 files changed, 38 insertions(+), 30 deletions(-) diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp index c6cc741cf..8642b1af2 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp @@ -1420,40 +1420,45 @@ int multiSlsDetector::startReadOut(){ int* multiSlsDetector::getDataFromDetector() { int nel=thisMultiDetector->dataBytes/sizeof(int); - int n; - int* retval=new int[nel]; + int n = 0; + int* retval= NULL; int *retdet, *p=retval; - int nodata=1, nodatadet=-1;; + int nodata=1, nodatadet=-1; + int nodatadetectortype = false; + detectorType types = getDetectorsType(); + if(types == EIGER || types == JUNGFRAU){ + nodatadetectortype = true; + } + + if(!nodatadetectortype) + retval=new int[nel]; for (int id=0; idnumberOfDetectors; id++) { if (detectors[id]) { retdet=detectors[id]->getDataFromDetector(p); - n=detectors[id]->getDataBytes(); if(detectors[id]->getErrorMask()) setErrorMask(getErrorMask()|(1<getDataBytes(); + if (retdet) { + nodata=0; #ifdef VERBOSE - cout << "Detector " << id << " returned " << n << " bytes " << endl; + cout << "Detector " << id << " returned " << n << " bytes " << endl; #endif - } else { - nodatadet=id; + } else { + nodatadet=id; #ifdef VERBOSE - cout << "Detector " << id << " does not have data left " << endl; + cout << "Detector " << id << " does not have data left " << endl; #endif - /*if((detectors[id]->getDetectorsType() != EIGER)||(detectors[id]->getDetectorsType() != JUNGFRAU)) - break;*/ + } + p+=n/sizeof(int); } - p+=n/sizeof(int); } } //eiger returns only null - detectorType types = getDetectorsType(); - if(types == EIGER || types == JUNGFRAU){ - delete [] retval; + if(nodatadetectortype){ return NULL; } diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index 1983e54c7..7e3f049ad 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -3807,19 +3807,21 @@ int* slsDetector::readFrame(){ int* slsDetector::getDataFromDetector(int *retval){ - int nel=thisDetector->dataBytes/sizeof(int); - int n; - - int *r=retval; - - - // int* retval=new int[nel]; - - if (retval==NULL) - retval=new int[nel]; - int ret=FAIL; char mess[MAX_STR_LENGTH]="Nothing"; + int nel=thisDetector->dataBytes/sizeof(int); + int n; + int *r=retval; + + int nodatadetectortype = false; + detectorType types = getDetectorsType(); + if(types == EIGER || types == JUNGFRAU){ + nodatadetectortype = true; + } + + if (!nodatadetectortype && retval==NULL) + retval=new int[nel]; + #ifdef VERBOSE std::cout<< "getting data "<< thisDetector->dataBytes << " " << nel<< std::endl; @@ -3841,11 +3843,12 @@ int* slsDetector::getDataFromDetector(int *retval){ std::cout<< "Detector successfully returned: " << mess << " " << n << std::endl; #endif } - if (r==NULL) { + if ((!nodatadetectortype) && (r==NULL)){ delete [] retval; } return NULL; - } else { + } else if (!nodatadetectortype){ + n=controlSocket->ReceiveDataOnly(retval,thisDetector->dataBytes); #ifdef VERBOSE