From 84f6f119c260d5c7ba634ea1f0a24588629fc808 Mon Sep 17 00:00:00 2001 From: gconesab Date: Thu, 17 Jun 2010 11:08:52 +0000 Subject: [PATCH] correct memory leak in digitizer, put protection in AliEMCALDigit dtor --- EMCAL/AliEMCALDigit.cxx | 54 ++++++++++++++++++++++++------------- EMCAL/AliEMCALDigitizer.cxx | 2 ++ 2 files changed, 38 insertions(+), 18 deletions(-) diff --git a/EMCAL/AliEMCALDigit.cxx b/EMCAL/AliEMCALDigit.cxx index 74b4f42b631..2037198d444 100644 --- a/EMCAL/AliEMCALDigit.cxx +++ b/EMCAL/AliEMCALDigit.cxx @@ -175,24 +175,42 @@ AliEMCALDigit::AliEMCALDigit(const AliEMCALDigit & digit) fIndexInList = digit.fIndexInList ; // data members - fSamples = new Int_t[fNSamples]; - for (Int_t i=0; i < digit.fNSamples; i++) fSamples[i] = digit.fSamples[i]; - fSamplesHG = new Int_t[fNSamplesHG]; - for (Int_t i=0; i < digit.fNSamplesHG; i++) fSamplesHG[i] = digit.fSamplesHG[i]; - - fPrimary = new Int_t[fNMaxPrimary] ; - fDEPrimary = new Float_t[fNMaxPrimary] ; - fIparent = new Int_t[fNMaxiparent] ; - fDEParent = new Float_t[fNMaxiparent] ; - Int_t i ; - for ( i = 0; i < fNMaxPrimary ; i++) { - fPrimary[i] = digit.fPrimary[i] ; - fDEPrimary[i] = digit.fDEPrimary[i] ; + if(fNSamples){ + fSamples = new Int_t[fNSamples]; + for (Int_t i=0; i < digit.fNSamples; i++) fSamples[i] = digit.fSamples[i]; } - Int_t j ; - for (j = 0; j< fNMaxiparent ; j++) { + else fNSamples = 0; + + if(fNSamplesHG){ + fSamplesHG = new Int_t[fNSamplesHG]; + for (Int_t i=0; i < digit.fNSamplesHG; i++) fSamplesHG[i] = digit.fSamplesHG[i]; + } + else fNSamplesHG = 0; + + if(fNMaxPrimary){ + fPrimary = new Int_t [fNMaxPrimary] ; + fDEPrimary = new Float_t[fNMaxPrimary] ; + for ( Int_t i = 0; i < fNMaxPrimary ; i++) { + fPrimary[i] = digit.fPrimary[i] ; + fDEPrimary[i] = digit.fDEPrimary[i] ; + } + } + else{ + fPrimary = 0 ; + fDEPrimary = 0 ; + + } + if(fNMaxiparent){ + fIparent = new Int_t [fNMaxiparent] ; + fDEParent = new Float_t[fNMaxiparent] ; + for (Int_t j = 0; j< fNMaxiparent ; j++) { fIparent[j] = digit.fIparent[j] ; - fDEParent[j] = digit.fDEParent[j] ; + fDEParent[j] = digit.fDEParent[j] ; + } + } + else { + fIparent = 0 ; + fDEParent = 0 ; } } @@ -204,8 +222,8 @@ AliEMCALDigit::~AliEMCALDigit() delete [] fDEPrimary ; delete [] fIparent ; delete [] fDEParent ; - delete [] fSamples; - delete [] fSamplesHG; + delete [] fSamples; + delete [] fSamplesHG; } diff --git a/EMCAL/AliEMCALDigitizer.cxx b/EMCAL/AliEMCALDigitizer.cxx index 21687d30c92..dc4e605a1d1 100644 --- a/EMCAL/AliEMCALDigitizer.cxx +++ b/EMCAL/AliEMCALDigitizer.cxx @@ -730,6 +730,8 @@ void AliEMCALDigitizer::Digits2FastOR(TClonesArray* digitsTMP, TClonesArray* dig } } } + + delete [] timeSamples; } //____________________________________________________________________________ -- 2.43.0