From 239fdf4e2d3e1a794e440dd77e2b0366871ca8b9 Mon Sep 17 00:00:00 2001 From: slindal Date: Thu, 4 Nov 2010 09:54:51 +0000 Subject: [PATCH] -Fixed bug in offline buffer that deleted event object. --- EVE/EveHLT/AliEveEventBuffer.cxx | 47 ++++++++++++++------- EVE/EveHLT/AliEveEventBuffer.h | 9 ++-- EVE/EveHLT/AliEveEventBufferOffline.cxx | 10 ++--- EVE/EveHLT/AliEveHLTEventManager.cxx | 10 ++--- EVE/EveHLT/AliEveHLTEventManagerOffline.cxx | 32 ++++++-------- EVE/EveHLT/AliEveHLTEventManagerOffline.h | 2 - EVE/hlt-macros/off.C | 2 +- 7 files changed, 62 insertions(+), 50 deletions(-) diff --git a/EVE/EveHLT/AliEveEventBuffer.cxx b/EVE/EveHLT/AliEveEventBuffer.cxx index 096e73e59dd..eea002fa025 100644 --- a/EVE/EveHLT/AliEveEventBuffer.cxx +++ b/EVE/EveHLT/AliEveEventBuffer.cxx @@ -22,20 +22,19 @@ AliEveEventBuffer::AliEveEventBuffer() : fCurrentEvent(NULL), fBIndex(), fTimer(NULL), - fThread(NULL), fEventId(), fBufferMonStarted(kFALSE) { // see header file for class documentation - fEventBuffer = new TObjArray(10, 0); - fEventBuffer->SetOwner(kTRUE); + fEventBuffer = new TObjArray(fBufferSize, 0); + fEventBuffer->SetOwner(kFALSE); for(int id = 0; id < kSize; id++) { fBIndex[id] = -1; } fTimer = new TTimer(); - fTimer->Connect("Timeout()", "AliEveEventBuffer", this, "MonitorBuffer()"); + fTimer->Connect("Timeout()", "AliEveEventBuffer", this, "CreateBufferThread()"); fEventId = new Int_t[fBufferSize]; @@ -60,12 +59,25 @@ AliEveEventBuffer::~AliEveEventBuffer() { } +void AliEveEventBuffer::CreateBufferThread() { + cout << "hereherehere"<Run(); + +} + ///___________________________________________________________________________ void * AliEveEventBuffer::BufferThread(void * buffer) { + cout <<"BufferThread : " <(buffer)->GetBufferMonStarted()) { - reinterpret_cast(buffer)->StartBufferMonitor(); + if (!reinterpret_cast(buffer)->GetBusy()) { + reinterpret_cast(buffer)->MonitorBuffer(); + } else { + cout << "busy"<At(fBIndex[kTop]); - if (object) delete object; + //TObject * object = fEventBuffer->At(fBIndex[kTop]); + fEventBuffer->RemoveAt(fBIndex[kTop]); + //if (object) delete object; fEventBuffer->AddAt(event, fBIndex[kTop]); } @@ -228,11 +243,13 @@ Int_t AliEveEventBuffer::CalculateDifference(Int_t top, Int_t low) { void AliEveEventBuffer::StartBufferMonitor() { //cout << "NOT !!! starting buffer mon"<Start(5000); } ///___________________________________________________________________________________ void AliEveEventBuffer::StopBufferMonitor() { cout << "Stopping buffer mon"<Stop(); } diff --git a/EVE/EveHLT/AliEveEventBuffer.h b/EVE/EveHLT/AliEveEventBuffer.h index 24cf106c9b9..b88bbf5be1c 100644 --- a/EVE/EveHLT/AliEveEventBuffer.h +++ b/EVE/EveHLT/AliEveEventBuffer.h @@ -36,7 +36,8 @@ public: void SetBufferSize(Int_t bs) { fBufferSize = bs;} void SetBusy(Bool_t busy) { fBusy = busy;} - + Bool_t GetBusy() { return fBusy;} + //Navigate the event buffer // TObject * NavigateFwd(); // TObject * NavigateBack(); @@ -58,6 +59,9 @@ public: Int_t GetEventId() const { return fEventId[fBIndex[kCurrent]];} + void CreateBufferThread(); + + protected: enum fBufferIndex { @@ -108,6 +112,7 @@ private: /** assignment operator prohibited */ AliEveEventBuffer& operator=(const AliEveEventBuffer&); + TObject * GetNextUnSeen(); @@ -116,8 +121,6 @@ private: TTimer * fTimer; - TThread * fThread; - //Current event id Int_t * fEventId; diff --git a/EVE/EveHLT/AliEveEventBufferOffline.cxx b/EVE/EveHLT/AliEveEventBufferOffline.cxx index 65b7404aba2..2c935aa890b 100644 --- a/EVE/EveHLT/AliEveEventBufferOffline.cxx +++ b/EVE/EveHLT/AliEveEventBufferOffline.cxx @@ -84,12 +84,12 @@ TObject * AliEveEventBufferOffline::GetEventFromSource() { } //Copy event into new event (must be deleted when no longer needed in list!! - AliESDEvent * event = new AliESDEvent(); - fEvent->Copy(*event); - cout << event->GetNumberOfCaloClusters() << endl; + //AliESDEvent * event = new AliESDEvent(); + //fEvent->Copy(*event); + //cout << event->GetNumberOfCaloClusters() << endl; - if (event) { - return dynamic_cast(event); + if (fEvent) { + return dynamic_cast(fEvent); } else { cout << "error getting event" << endl; return NULL; diff --git a/EVE/EveHLT/AliEveHLTEventManager.cxx b/EVE/EveHLT/AliEveHLTEventManager.cxx index 1b2f2ee1134..23645347712 100644 --- a/EVE/EveHLT/AliEveHLTEventManager.cxx +++ b/EVE/EveHLT/AliEveHLTEventManager.cxx @@ -126,6 +126,7 @@ void AliEveHLTEventManager::DestroyDetectorElements(){ } + ///_______________________________________________________________________________________ void AliEveHLTEventManager::ConnectEventBuffer() { GetEventBuffer()->ConnectToSource(); @@ -135,13 +136,9 @@ void AliEveHLTEventManager::ConnectEventBuffer() { ///___________________________________________________________________________________________ void AliEveHLTEventManager::StartBufferMonitor() { AliEveEventBuffer * buffer = GetEventBuffer(); - if(buffer) { - TThread * fThread = new TThread(AliEveEventBuffer::BufferThread, (void*) buffer); - fThread->Run(); - } else { - cout << "Buffer does not exist " << endl; - } + buffer->StartBufferMonitor(); } + //______________________________________________________________________________________________ Int_t AliEveHLTEventManager::ProcessEvent(AliESDEvent * event) { @@ -206,6 +203,7 @@ Int_t AliEveHLTEventManager::ProcessEvent(TList * blockList) { return 0; } +///___________________________________________________________________________________________ void AliEveHLTEventManager::ProcessBlock(AliHLTHOMERBlockDesc * block) { //See header file for documentation diff --git a/EVE/EveHLT/AliEveHLTEventManagerOffline.cxx b/EVE/EveHLT/AliEveHLTEventManagerOffline.cxx index ce3040f20a5..1c96d17fb29 100644 --- a/EVE/EveHLT/AliEveHLTEventManagerOffline.cxx +++ b/EVE/EveHLT/AliEveHLTEventManagerOffline.cxx @@ -16,7 +16,6 @@ ClassImp(AliEveHLTEventManagerOffline) AliEveHLTEventManagerOffline::AliEveHLTEventManagerOffline() : AliEveHLTEventManager(), - fEvent(NULL), fEventBuffer(NULL) { // see header file for class documentation @@ -29,7 +28,6 @@ AliEveHLTEventManagerOffline::AliEveHLTEventManagerOffline() : AliEveHLTEventManagerOffline::AliEveHLTEventManagerOffline(TString filename) : AliEveHLTEventManager(), - fEvent(NULL), fEventBuffer(NULL) { // see header file for class documentation @@ -46,10 +44,6 @@ AliEveHLTEventManagerOffline::~AliEveHLTEventManagerOffline() { //DestroyElements(); //DestroyDetectorElements(); - if(fEvent) - delete fEvent; - fEvent = NULL; - if(fEventBuffer) delete fEventBuffer; fEventBuffer = NULL; @@ -58,20 +52,22 @@ AliEveHLTEventManagerOffline::~AliEveHLTEventManagerOffline() { void AliEveHLTEventManagerOffline::NextEvent() { //See header file for documentation - fEvent = dynamic_cast(fEventBuffer->NextEvent()); - if(fEvent) { - //Int_t eventId = fBuffer->GetEventId(); - ProcessEvent(fEvent); - } else { - cout << "couldn't get the event"<(fEventBuffer->NextEvent()); + + if(event) { + //Int_t eventId = fBuffer->GetEventId(); + ProcessEvent(event); + } else { + cout << "couldn't get the event"<(fEventBuffer->Fwd()); - if(fEvent) { - ProcessEvent(fEvent); + AliESDEvent * event = dynamic_cast(fEventBuffer->Fwd()); + if(event) { + ProcessEvent(event); } else { cout << "couldn't get the fwd event"<(fEventBuffer->Back()); - if(fEvent) { - ProcessEvent(fEvent); + AliESDEvent * event = dynamic_cast(fEventBuffer->Back()); + if(event) { + ProcessEvent(event); } else { cout << "couldn't get the back event"<SetEveManager(gEve); gEventManager->SetGeoManager(gGeoManager); gEventManager->SetRPhiManager(gRPhiMgr); -- 2.39.3