]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EVE/EveHLT/AliEveEventBuffer.cxx
fix coding violation
[u/mrichter/AliRoot.git] / EVE / EveHLT / AliEveEventBuffer.cxx
index 755c7651d8b7e53a9019f7e4f2a7eafbcebfd047..7b739c33172003eacf8af676056fe51a7081a3fc 100644 (file)
@@ -3,6 +3,7 @@
 #include "TObjArray.h"
 #include "TTimer.h"
 #include "TThread.h"
+#include "TMutex.h"
 #include "AliEveEventBuffer.h"
 
 
@@ -17,13 +18,14 @@ ClassImp(AliEveEventBuffer)
 AliEveEventBuffer::AliEveEventBuffer() :
   fBufferSize(10),
   fPreBuffer(4),
-  fBusy(kFALSE),
   fEventBuffer(NULL),
   fCurrentEvent(NULL),
   fBIndex(),
   fTimer(NULL),
   fEventId(),
-  fBufferMonStarted(kFALSE)
+  fBufferMonStarted(kFALSE),
+  fThread(NULL),
+  fMutex(NULL)
  {
   // see header file for class documentation
   fEventBuffer = new TObjArray(fBufferSize, 0);
@@ -40,6 +42,9 @@ AliEveEventBuffer::AliEveEventBuffer() :
   for(Int_t id = 0; id < fBufferSize; id++ ) {
     fEventId[id] = -2;
   }
+
+  fThread = new TThread(AliEveEventBuffer::BufferThread, (void*) this);
+  fMutex = new TMutex();
   
 
 }
@@ -64,22 +69,27 @@ AliEveEventBuffer::~AliEveEventBuffer() {
 
 ///___________________________________________________________________________
 void AliEveEventBuffer::CreateBufferThread() {
-  if(GetBusy()) {
+    // see header file for class documentation
+  
+  cout << "Threadexists: " << fThread->Exists() << endl;
+  if( fMutex->TryLock() ) {
     cout << "Buffer is busy, no thread created"<< endl;
+    return;
   } else {
     if ( (CalculateDifference(fBIndex[kTop],fBIndex[kLast]) < fPreBuffer) ) {
-      SetBusy(kTRUE);
-      cout << "CreateBufferThread()"<<endl;
-      TThread * fThread = new TThread(AliEveEventBuffer::BufferThread, (void*) this);
+      cout << "StartBufferThread()"<<endl;
       fThread->Run();
       cout << "Started BufferThread"<<endl;
     } else { 
       cout << "Buffer is full already"<<endl;
+      fMutex->UnLock();
     }
   }
 }
+
 ///___________________________________________________________________________
 void * AliEveEventBuffer::BufferThread(void * buffer) {
+  // see header file for class documentation
   cout <<"BufferThread : " <<endl;
   if(buffer) {
       reinterpret_cast<AliEveEventBuffer*>(buffer)->MonitorBuffer();
@@ -91,10 +101,11 @@ void * AliEveEventBuffer::BufferThread(void * buffer) {
 
 ///_____________________________________________________________________________
 void AliEveEventBuffer::MonitorBuffer() {
+  // see header file for class documentation
   cout << "Monitorbuffer() ";
-  SetBusy(kTRUE);
   FetchEvent();
-  SetBusy(kFALSE);
+  fMutex->UnLock();
+
   cout << "done " << endl;
 }
 
@@ -109,6 +120,7 @@ TObject * AliEveEventBuffer::NextEvent() {
 
 ///______________________________________________________________________________
 TObject * AliEveEventBuffer::Back() {
+  // see header file for class documentation
   cout << "go back"<<endl;
   PrintIndeces();
   Int_t prevId = CalculatePrevious(fBIndex[kCurrent]);
@@ -127,6 +139,7 @@ TObject * AliEveEventBuffer::Back() {
 
 ///______________________________________________________________________________
 TObject * AliEveEventBuffer::Fwd() {
+  // see header file for class documentation
   PrintIndeces();
   if (fBIndex[kCurrent] == fBIndex[kLast]) {
     cout<<  "returning NULL"<<endl;
@@ -157,12 +170,14 @@ TObject * AliEveEventBuffer::GetNextUnSeen() {
 }
 ///_________________________________________________________________________________
 void AliEveEventBuffer::PrintIndeces() {
+  // see header file for class documentation
   for(Int_t i = 0; i < kSize; i++) {
     cout << i << ": " << fBIndex[i] << endl;
   }
 }
 ///_________________________________________________________________________________
 void AliEveEventBuffer::PrintBuffer() {
+  // see header file for class documentation
   for(Int_t i = 0; i < 10; i++) {
     AliESDEvent * event = dynamic_cast<AliESDEvent*>(fEventBuffer->At(i));
     if(event) {
@@ -173,6 +188,7 @@ void AliEveEventBuffer::PrintBuffer() {
 
 ///____________________________________________________________________________________
 void AliEveEventBuffer::FetchEvent() {
+  // see header file for class documentation
   cout << "FetchEvent " << endl;
   TObject * event = GetEventFromSource();
   ULong64_t eventId = GetEventIdFromSource();
@@ -188,6 +204,7 @@ void AliEveEventBuffer::FetchEvent() {
 
 ///_________________________________________________________________________________
 void AliEveEventBuffer::AddToBuffer(TObject * event) {
+  // see header file for class documentation
   cout << "Add to buffer"<<endl;
   if(!event) return;
 
@@ -201,7 +218,7 @@ void AliEveEventBuffer::AddToBuffer(TObject * event) {
 }
 
 ///_____________________________________________________________________________________
-Int_t AliEveEventBuffer::CalculateNext(Int_t current) {
+Int_t AliEveEventBuffer::CalculateNext(Int_t current) const {
   //See header file for documentation
   current++;
   if(current == fBufferSize) current = 0;
@@ -210,7 +227,7 @@ Int_t AliEveEventBuffer::CalculateNext(Int_t current) {
 
 
 ///_____________________________________________________________________________________
-Int_t AliEveEventBuffer::CalculatePrevious(Int_t current) {
+Int_t AliEveEventBuffer::CalculatePrevious(Int_t current) const {
   //See header file for documentation
   cout << "CalculatePrev:  " << current; 
   current--;
@@ -220,7 +237,7 @@ Int_t AliEveEventBuffer::CalculatePrevious(Int_t current) {
 }
 
 ///__________________________________________________________________________________
-Int_t AliEveEventBuffer::CalculateDifference(Int_t top, Int_t low) {
+Int_t AliEveEventBuffer::CalculateDifference(Int_t top, Int_t low) const {
   //See header file for documentation
   if (top > low) {
     //    cout << "top > low"<<endl;
@@ -241,7 +258,7 @@ void AliEveEventBuffer::StartBufferMonitor() {
   if(!GetBufferMonStarted()) {
     CreateBufferThread();
     SetBufferMonStarted(kTRUE);
-    fTimer->Start(3000);
+    fTimer->Start(15000);
   } else {
     cout << "Stopping buffer monitor"<<endl;
     fTimer->Stop();
@@ -250,6 +267,7 @@ void AliEveEventBuffer::StartBufferMonitor() {
 }
 ///___________________________________________________________________________________
 void AliEveEventBuffer::StopBufferMonitor() {
+  // see header file for class documentation
   cout << "Stopping buffer mon"<<endl;
   SetBufferMonStarted(kFALSE);
   fTimer->Stop();