From 83405b70c8cbc5637c2561a3419378e0f0d534dd Mon Sep 17 00:00:00 2001 From: l_maliakal_d Date: Thu, 6 Feb 2014 14:54:01 +0000 Subject: [PATCH] replaced usleep which waits for queue to have data, with semaphores git-svn-id: file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorSoftware@732 951219d9-93cf-4727-9268-0efd64621fa3 --- slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp | 6 +++++- slsDetectorSoftware/slsDetector/slsDetector.cpp | 3 +++ slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp | 6 +++++- slsDetectorSoftware/slsDetectorAnalysis/postProcessing.h | 4 +++- 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp index 185a85505..cf15fb593 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp @@ -1365,6 +1365,7 @@ int* multiSlsDetector::readFrame(){ } } dataQueue.push(retval); + sem_post(&queue_mutex); return retval; }; @@ -1400,6 +1401,7 @@ int* multiSlsDetector::readAll(){ //std::cout << "-" << flush; #endif dataQueue.push(retval); + sem_post(&queue_mutex); } for (int id=0; idnumberOfDetectors; id++) { if (detectors[id]) { @@ -1440,6 +1442,7 @@ int* multiSlsDetector::startAndReadAll(){ //std::cout << "-" << flush; #endif dataQueue.push(retval); + sem_post(&queue_mutex); } for (int id=0; idnumberOfDetectors; id++) { @@ -1530,6 +1533,7 @@ slsDetectorDefs::runStatus multiSlsDetector::getRunStatus() { int* multiSlsDetector::popDataQueue() { int *retval=NULL; + sem_wait(&queue_mutex); if( !dataQueue.empty() ) { retval=dataQueue.front(); dataQueue.pop(); @@ -1549,11 +1553,11 @@ detectorData* multiSlsDetector::popFinalDataQueue() { void multiSlsDetector::resetDataQueue() { int *retval=NULL; while( !dataQueue.empty() ) { + sem_wait(&queue_mutex); retval=dataQueue.front(); dataQueue.pop(); delete [] retval; } - } void multiSlsDetector::resetFinalDataQueue() { diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index 4b70951c8..470f0bfbc 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -3237,6 +3237,7 @@ int* slsDetector::readFrame(){ retval=getDataFromDetector(); if (retval) { dataQueue.push(retval); + sem_post(&queue_mutex); controlSocket->Disconnect(); } } @@ -3333,6 +3334,7 @@ int* slsDetector::readAll(){ //std::cout << "-" << flush ; #endif dataQueue.push(retval); + sem_post(&queue_mutex); } controlSocket->Disconnect(); } @@ -3393,6 +3395,7 @@ int* slsDetector::startAndReadAll(){ //std::cout<< "-" << flush; #endif dataQueue.push(retval); + sem_post(&queue_mutex); } controlSocket->Disconnect(); diff --git a/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp b/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp index 9a33309cf..35fadb178 100644 --- a/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp +++ b/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp @@ -35,7 +35,9 @@ postProcessing::postProcessing(): expTime(NULL), ang(NULL), val(NULL), err(NULL) pCallbackArg = 0; //cout << "done "<< endl; rawDataReady = 0; - pRawDataArg = 0; + pRawDataArg = 0; + + sem_init(&queue_mutex,0,0); #ifdef VERBOSE registerDataCallback(&defaultDataReadyFunc, NULL); @@ -581,6 +583,7 @@ int* postProcessing::popDataQueue() { cout << "Pop data queue lock" << endl; #endif + sem_wait(&queue_mutex); pthread_mutex_lock(&mp); if( !dataQueue.empty() ) { retval=dataQueue.front(); @@ -609,6 +612,7 @@ void postProcessing::resetDataQueue() { int *retval=NULL; pthread_mutex_lock(&mp); while( !dataQueue.empty() ) { + sem_wait(&queue_mutex); retval=dataQueue.front(); dataQueue.pop(); delete [] retval; diff --git a/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.h b/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.h index d58b74962..c7c72c19d 100644 --- a/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.h +++ b/slsDetectorSoftware/slsDetectorAnalysis/postProcessing.h @@ -17,6 +17,7 @@ #include #include #include +#include class postProcessingFuncs; @@ -294,8 +295,9 @@ s /** data queue size */ int queuesize; + /** queue mutex */ + sem_t queue_mutex; - /** start data processing thread