Implemented Mutex
authorslindal <slindal@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 11 Nov 2010 11:23:30 +0000 (11:23 +0000)
committerslindal <slindal@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 11 Nov 2010 11:23:30 +0000 (11:23 +0000)
EVE/EveHLT/AliEveEventBuffer.cxx
EVE/EveHLT/AliEveEventBuffer.h
EVE/EveHLT/AliEveHLTEventManagerHomer.cxx

index 97f287c..d064439 100644 (file)
@@ -3,6 +3,7 @@
 #include "TObjArray.h"
 #include "TTimer.h"
 #include "TThread.h"
+#include "TMutex.h"
 #include "AliEveEventBuffer.h"
 
 
@@ -24,7 +25,8 @@ AliEveEventBuffer::AliEveEventBuffer() :
   fTimer(NULL),
   fEventId(),
   fBufferMonStarted(kFALSE),
-  fThread(NULL)
+  fThread(NULL),
+  fMutex(NULL)
  {
   // see header file for class documentation
   fEventBuffer = new TObjArray(fBufferSize, 0);
@@ -43,7 +45,7 @@ AliEveEventBuffer::AliEveEventBuffer() :
   }
 
   fThread = new TThread(AliEveEventBuffer::BufferThread, (void*) this);
-
+  fMutex = new TMutex();
   
 
 }
@@ -68,10 +70,12 @@ AliEveEventBuffer::~AliEveEventBuffer() {
 
 ///___________________________________________________________________________
 void AliEveEventBuffer::CreateBufferThread() {
+  
+  
   cout << "Threadexists: " << fThread->Exists() << endl;
-  if(GetBusy()) {
+  if( fMutex->TryLock() ) {
     cout << "Buffer is busy, no thread created"<< endl;
-    
+    return;
   } else {
     if ( (CalculateDifference(fBIndex[kTop],fBIndex[kLast]) < fPreBuffer) ) {
       SetBusy(kTRUE);
@@ -98,9 +102,9 @@ void * AliEveEventBuffer::BufferThread(void * buffer) {
 ///_____________________________________________________________________________
 void AliEveEventBuffer::MonitorBuffer() {
   cout << "Monitorbuffer() ";
-  SetBusy(kTRUE);
   FetchEvent();
-  SetBusy(kFALSE);
+  fMutex->UnLock();
+
   cout << "done " << endl;
 }
 
@@ -247,7 +251,7 @@ void AliEveEventBuffer::StartBufferMonitor() {
   if(!GetBufferMonStarted()) {
     CreateBufferThread();
     SetBufferMonStarted(kTRUE);
-    fTimer->Start(10000);
+    fTimer->Start(15000);
   } else {
     cout << "Stopping buffer monitor"<<endl;
     fTimer->Stop();
index 43be485..a32f97b 100644 (file)
@@ -21,7 +21,7 @@ class TObjArray;
 class TObject;
 class TTimer;
 class TThread;
-
+#include "TMutex.h"
 #include "TTimer.h"
 
 class AliEveEventBuffer : public TObject{
@@ -60,6 +60,10 @@ public:
   ULong64_t GetEventId() const { return fEventId[fBIndex[kCurrent]]; }
   void SetEventId(ULong64_t eventId) { fEventId[fBIndex[kCurrent]] = eventId;}
 
+  Int_t LockMutex() { return fMutex->TryLock();}
+  Int_t UnLockMutex() { return fMutex->UnLock();}
+
+
 protected:
   
   enum fBufferIndex {
@@ -125,7 +129,7 @@ private:
   Bool_t fBufferMonStarted;
 
   TThread * fThread;
-
+ TMutex * fMutex;
 
   ClassDef(AliEveEventBuffer, 0); // Manage connections to HLT data-sources.
 };
index e09ff1a..635743d 100644 (file)
@@ -57,12 +57,10 @@ void AliEveHLTEventManagerHomer::ProcessList(TList * blockList) {
 ///________________________________________________________________________________
 void AliEveHLTEventManagerHomer::NextEvent() {
   //See header file for documentation
-  if(fEventBuffer->GetBusy() ) {
+  if(fEventBuffer->LockMutex() ) {
     cout << "event buffer already busy"<<endl;
     return;
-  }else {
-    fEventBuffer->SetBusy(kTRUE);
-  }
+  } else {
 
   TList * aSyncEvent = fEventBuffer->GetASyncEvent();
   TList * event = static_cast<TList*>(fEventBuffer->NextEvent());
@@ -92,8 +90,9 @@ void AliEveHLTEventManagerHomer::NextEvent() {
   //   }  else {
   //    cout << "No async bloc"<<endl;
   // }
-
-  fEventBuffer->SetBusy(kFALSE);
+  }
+  
+  fEventBuffer->UnLockMutex();
 }