From 1af065fdb13c812348253be6e16f4522ce6e0f4b Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Mon, 13 Nov 2017 11:13:26 +0100 Subject: [PATCH] infinite loop with gettotalnumberofchannels in gappixels initialization resulting in bus error fix --- .../multiSlsDetector/multiSlsDetector.cpp | 22 ++++++++++--------- .../slsDetector/slsDetector.cpp | 9 +++++--- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp index e3da61386..abd656bf4 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp @@ -4299,9 +4299,9 @@ int multiSlsDetector::setFlippedData(dimension d, int value){ int multiSlsDetector::enableGapPixels(int val) { - if(getDetectorsType() != EIGER){ + if(val > 0 && getDetectorsType() != EIGER){ std::cout << "Not implemented for this detector" << std::endl; - return -1; + val = -1; } int ret=-100,ret1; @@ -4314,15 +4314,17 @@ int multiSlsDetector::enableGapPixels(int val) { ret=-1; } - // update data bytes incl gap pixels - thisMultiDetector->dataBytesInclGapPixels=0; - for (int i = 0; i < thisMultiDetector->numberOfDetectors; ++i) { - if (detectors[i]) - thisMultiDetector->dataBytesInclGapPixels += detectors[i]->getDataBytesInclGapPixels(); - } + if (val != -1) { + // update data bytes incl gap pixels + thisMultiDetector->dataBytesInclGapPixels=0; + for (int i = 0; i < thisMultiDetector->numberOfDetectors; ++i) { + if (detectors[i]) + thisMultiDetector->dataBytesInclGapPixels += detectors[i]->getDataBytesInclGapPixels(); + } - // update offsets and number of channels incl gap pixels in multi level - updateOffsets(); + // update offsets and number of channels incl gap pixels in multi level + updateOffsets(); + } return ret; } diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index 577518538..e70e1448b 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -1747,7 +1747,10 @@ int slsDetector::getTotalNumberOfChannels() { thisDetector->nChans=thisDetector->nChan[X]; thisDetector->dataBytes=thisDetector->nChans*thisDetector->nChips*thisDetector->nMods*2*thisDetector->timerValue[SAMPLES_JCTB]; // cout << "Total number of channels is "<< thisDetector->nChans*thisDetector->nChips*thisDetector->nMods << " data bytes is " << thisDetector->dataBytes << endl; - thisDetector->dataBytesInclGapPixels = getTotalNumberOfChannelsInclGapPixels(X)*getTotalNumberOfChannelsInclGapPixels(Y) *2*thisDetector->timerValue[SAMPLES_JCTB]; + thisDetector->dataBytesInclGapPixels = + (thisDetector->nChan[X]*thisDetector->nChip[X]*thisDetector->nMod[X]) + (thisDetector->gappixels * thisDetector->nGappixels[X]) * + (thisDetector->nChan[Y]*thisDetector->nChip[Y]*thisDetector->nMod[Y]) + (thisDetector->gappixels * thisDetector->nGappixels[Y]) * + 2*thisDetector->timerValue[SAMPLES_JCTB]; } else { #ifdef VERBOSE cout << "det type is "<< thisDetector->myDetectorType << endl; @@ -2007,8 +2010,8 @@ int slsDetector::setFlippedData(dimension d, int value){ int slsDetector::enableGapPixels(int val) { - if(thisDetector->myDetectorType!= EIGER) - return -1; + if(val > 0 && thisDetector->myDetectorType!= EIGER) + val = -1; if (val >= 0) { val=(val>0)?1:0;