From a66fe5e59fa79929050a32418dab57e6e5b55f2d Mon Sep 17 00:00:00 2001 From: hristov Date: Thu, 7 Feb 2008 08:24:08 +0000 Subject: [PATCH] Fixes in the memory managment, additional protections --- HMPID/AliHMPIDRawStream.cxx | 62 +++++++++++++++++++++++++-------- HMPID/AliHMPIDRawStream.h | 4 +-- HMPID/AliHMPIDReconstructor.cxx | 1 - 3 files changed, 49 insertions(+), 18 deletions(-) diff --git a/HMPID/AliHMPIDRawStream.cxx b/HMPID/AliHMPIDRawStream.cxx index 946a532f622..89657a1087d 100644 --- a/HMPID/AliHMPIDRawStream.cxx +++ b/HMPID/AliHMPIDRawStream.cxx @@ -32,25 +32,38 @@ ClassImp(AliHMPIDRawStream) //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ AliHMPIDRawStream::AliHMPIDRawStream(AliRawReader* rawReader) : + fNPads(0), + fCharge(0x0), + fPad(0x0), fDDLNumber(-1), fRawReader(rawReader), - fData(NULL), - fPosition(-1) + fData(0x0), + fNumOfErr(0x0), + fPosition(-1), + fWord(0), + fZeroSup(kTRUE), + fPos(0x0), + iPos(0) { // Constructor - fNPads = 0; - fCharge = 0x0; - fPad =0x0; fRawReader->Reset(); fRawReader->Select("HMPID"); } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ AliHMPIDRawStream::AliHMPIDRawStream() : + fNPads(0), + fCharge(0x0), + fPad(0x0), fDDLNumber(-1), fRawReader(0x0), - fData(NULL), - fPosition(-1) + fData(0x0), + fNumOfErr(0x0), + fPosition(-1), + fWord(0), + fZeroSup(kTRUE), + fPos(0x0), + iPos(0) { } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ @@ -104,6 +117,11 @@ Bool_t AliHMPIDRawStream::Next() if(fRawReader->GetType() == 7) { //New: Select Physics events, Old: Raw data size is not 0 and not 47148 (pedestal) fDDLNumber = fRawReader->GetDDLID(); + if (fDDLNumber<0) { + AliWarning("Negative DDL number!"); + return kFALSE; + } + if(stDeb) Printf("DDL %i started to be decoded!.",fDDLNumber); InitVars(fRawReader->GetDataSize()/4); status = ReadHMPIDRawData(); @@ -113,6 +131,7 @@ Bool_t AliHMPIDRawStream::Next() else Printf("Event DDL %i ERROR in decoding!.",fDDLNumber); // DumpData(fRawReader->GetDataSize()); } + DelVars(); // stDeb=kFALSE; } // return status; @@ -122,25 +141,38 @@ Bool_t AliHMPIDRawStream::Next() void AliHMPIDRawStream::InitVars(Int_t n) { fNPads = 0; - fCharge = new Int_t[n]; - fPad = new Int_t[n]; + if (n>0) fCharge = new Int_t[n]; + if (n>0) fPad = new Int_t[n]; fNumOfErr = new Int_t*[kNDDL]; // Store the numner of errors for a given error type and a given DD for(Int_t i=0;i0) fPos = new Int_t[4*n]; //reset debug iPos = 0; } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ void AliHMPIDRawStream::DelVars() { fNPads = 0; - delete fCharge; - delete fPad; - delete fNumOfErr; - for(Int_t i=0;i kSumErr-1 ) return -999; else if( ddl < 0 || ddl > kNDDL-1 ) return -999; - else - return fNumOfErr[ddl][eType]; + else if (!fNumOfErr) return -999; + else return fNumOfErr[ddl][eType]; } //GetErrors() //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ diff --git a/HMPID/AliHMPIDReconstructor.cxx b/HMPID/AliHMPIDReconstructor.cxx index a7288a689fb..a25dedc4e30 100644 --- a/HMPID/AliHMPIDReconstructor.cxx +++ b/HMPID/AliHMPIDReconstructor.cxx @@ -178,7 +178,6 @@ void AliHMPIDReconstructor::ConvertDigits(AliRawReader *pRR,TTree *pDigTree)cons } } - stream.Delete(); pDigTree->Fill(); for(Int_t iCh=AliHMPIDParam::kMinCh;iCh<=AliHMPIDParam::kMaxCh;iCh++)fDig->At(iCh)->Clear(); -- 2.43.0