Memory leak fixed (Ruben)
authorkharlov <kharlov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 30 Aug 2013 15:10:31 +0000 (15:10 +0000)
committerkharlov <kharlov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 30 Aug 2013 15:10:31 +0000 (15:10 +0000)
PHOS/AliPHOSClusterizer.cxx
PHOS/AliPHOSDigit.cxx
PHOS/AliPHOSDigit.h
PHOS/AliPHOSEmcRecPoint.cxx
PHOS/AliPHOSEmcRecPoint.h
PHOS/AliPHOSReconstructor.cxx

index f88550f..77fce84 100644 (file)
@@ -90,7 +90,7 @@ void AliPHOSClusterizer::SetInput(TTree * digitsTree)
     AliError("can't get the branch with the PHOS digits !");
     return;
   }
-  fDigitsArr->Clear();
+  fDigitsArr->Clear("C");
   branch->SetAddress(&fDigitsArr);
   branch->GetEntry(0);
 }
index 1e8a18b..e0ed995 100644 (file)
@@ -179,6 +179,16 @@ AliPHOSDigit::~AliPHOSDigit()
 }
 
 //____________________________________________________________________________
+void AliPHOSDigit::Clear(const Option_t*) 
+{
+  // Delete array of primaries if any
+  delete[] fSamplesHG; fSamplesHG = NULL ;
+  delete[] fSamplesLG; fSamplesLG = NULL ;
+  delete[] fPrimary;   fPrimary   = NULL ;
+
+}
+
+//____________________________________________________________________________
 Int_t AliPHOSDigit::Compare(const TObject * obj) const
 {
   // Compares two digits with respect to its Id
index d6bdf4a..c32959e 100644 (file)
@@ -48,7 +48,7 @@ class AliPHOSDigit : public AliDigitNew {
   AliPHOSDigit(Int_t primary, Int_t id, Float_t energy , Float_t Time, Int_t index = -1) ;
   AliPHOSDigit(const AliPHOSDigit & digit) ;
   virtual ~AliPHOSDigit() ;
-
+  void   Clear(const Option_t*);
   Bool_t operator==(const AliPHOSDigit &rValue) const;
 
   AliPHOSDigit& operator += (AliPHOSDigit const &rValue) ;
index 19b72b1..efca0fc 100644 (file)
@@ -60,6 +60,9 @@
  
 ClassImp(AliPHOSEmcRecPoint)
 
+Long64_t AliPHOSEmcRecPoint::fgInstCount=0;
+
+
 //____________________________________________________________________________
 AliPHOSEmcRecPoint::AliPHOSEmcRecPoint() : 
   AliPHOSRecPoint(),
@@ -67,6 +70,7 @@ AliPHOSEmcRecPoint::AliPHOSEmcRecPoint() :
   fEnergyList(0), fTime(-1.), fNExMax(0),
   fM2x(0.), fM2z(0.), fM3x(0.), fM4z(0.),
   fPhixe(0.), fDistToBadCrystal(-1),fDebug(0)
+  ,fInstCount(0)
 {
   // ctor
   fMulDigit   = 0 ;  
@@ -75,7 +79,8 @@ AliPHOSEmcRecPoint::AliPHOSEmcRecPoint() :
 
   fLambda[0] = 0.;
   fLambda[1] = 0.;
-
+  fInstCount=fgInstCount++;
+  if (gDebug==-10) AliInfo(Form("0Create instance %lld",fInstCount));
 }
 
 //____________________________________________________________________________
@@ -85,6 +90,7 @@ AliPHOSEmcRecPoint::AliPHOSEmcRecPoint(const char * opt) :
   fEnergyList(0), fTime(-1.), fNExMax(0),
   fM2x(0.), fM2z(0.), fM3x(0.), fM4z(0.),
   fPhixe(0.), fDistToBadCrystal(-1), fDebug(0)
+  ,fInstCount(0)
 {
   // ctor
   fMulDigit   = 0 ;  
@@ -93,6 +99,8 @@ AliPHOSEmcRecPoint::AliPHOSEmcRecPoint(const char * opt) :
   
   fLambda[0] = 0.;
   fLambda[1] = 0.;
+  fInstCount=fgInstCount++;
+   if (gDebug==-10) AliInfo(Form("1Create instance %lld",fInstCount));
 }
 
 //____________________________________________________________________________
@@ -102,6 +110,7 @@ AliPHOSEmcRecPoint::AliPHOSEmcRecPoint(const AliPHOSEmcRecPoint & rp) :
   fEnergyList(0), fTime(rp.fTime), fNExMax(rp.fNExMax),
   fM2x(rp.fM2x), fM2z(rp.fM2z), fM3x(rp.fM3x), fM4z(rp.fM4z),
   fPhixe(rp.fPhixe), fDistToBadCrystal(rp.fDistToBadCrystal), fDebug(rp.fDebug)
+  ,fInstCount(0)
 {
   // cpy ctor
   fMulDigit   = rp.fMulDigit ;  
@@ -113,6 +122,8 @@ AliPHOSEmcRecPoint::AliPHOSEmcRecPoint(const AliPHOSEmcRecPoint & rp) :
   for(Int_t i=0; i<2; i++) {
     fLambda[i] = rp.fLambda[i];
   }
+  fInstCount=fgInstCount++;
+   if (gDebug==-10) AliInfo(Form("2Create instance %lld",fInstCount));
 }
 
 //____________________________________________________________________________
@@ -121,6 +132,9 @@ AliPHOSEmcRecPoint::~AliPHOSEmcRecPoint()
   // dtor
   if ( fEnergyList )
     delete[] fEnergyList ; 
+   if (gDebug==-10) AliInfo(Form("Delete instance %lld (%lld)",fInstCount, fgInstCount));
+  if (fInstCount>=fgInstCount-1) fgInstCount--;
+
 }
 
 //____________________________________________________________________________
index fe3c3c3..2a870e5 100644 (file)
@@ -120,8 +120,10 @@ protected:
   Float_t fDistToBadCrystal;  // Distance to nearest bad crystal
 
   Int_t fDebug;               //! debug level (0 - no output)
-  
-  ClassDef(AliPHOSEmcRecPoint,3)  // EMC RecPoint (cluster)
+   Long64_t fInstCount;
+  static Long64_t fgInstCount;
+  ClassDef(AliPHOSEmcRecPoint,4)  // EMC RecPoint (cluster)
 
 };
 
index 468e417..2ec509d 100644 (file)
@@ -387,7 +387,7 @@ void AliPHOSReconstructor::FillESD(TTree* digitsTree, TTree* clustersTree,
     delete [] fracList;
     delete [] absIdList;
   }
-  fgDigitsArray ->Clear();
+  fgDigitsArray ->Clear("C");
   fgEMCRecPoints->Clear("C");
   recParticles  ->Clear();