]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Fixed memleak and delete of refarray
authorkleinb <kleinb@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 27 Nov 2007 18:47:34 +0000 (18:47 +0000)
committerkleinb <kleinb@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 27 Nov 2007 18:47:34 +0000 (18:47 +0000)
STEER/AliMCEvent.cxx
STEER/AliMCParticle.cxx
STEER/AliMCParticle.h

index b31909cc0b235e6a29cef7f9e781a4b74647ea75..ef0db494c35e7687e12f3253a0b74fbaa1961c98 100644 (file)
@@ -172,10 +172,11 @@ void AliMCEvent::Clean()
 
 void AliMCEvent::FinishEvent()
 {
-    // Clean-up after event
-     fStack->Reset(0);
-     fMCParticles->Delete();
-     fTrackReferences->Clear();
+  // Clean-up after event
+  fStack->Reset(0);
+  fMCParticles->Delete();
+  fMCParticleMap->Delete();
+  fTrackReferences->Clear();
 }
 
 
@@ -443,7 +444,6 @@ AliMCParticle* AliMCEvent::GetTrack(Int_t i) const
     TClonesArray  *trefs      = 0;
     Int_t          ntref      = 0;
     TRefArray     *rarray     = 0;
-    
     // Out of range check
     if (i < 0 || i >= fNparticles) {
        AliWarning(Form("AliMCEvent::GetEntry: Index out of range"));
@@ -452,7 +452,6 @@ AliMCParticle* AliMCEvent::GetTrack(Int_t i) const
     }
     
 
-
     //
     // First check of the MC Particle has been already cached
     if(!fMCParticleMap->At(i)) {
@@ -474,7 +473,6 @@ AliMCParticle* AliMCEvent::GetTrack(Int_t i) const
                nen++;
            } // loop over track references for entry i
        } // if TreeTR available
-
        Int_t nentries = fMCParticles->GetEntriesFast();
        new ((*fMCParticles)[nentries]) AliMCParticle(particle, rarray);
        mcParticle = dynamic_cast<AliMCParticle*>((*fMCParticles)[nentries]);
@@ -482,7 +480,6 @@ AliMCParticle* AliMCEvent::GetTrack(Int_t i) const
     } else {
        mcParticle = dynamic_cast<AliMCParticle*>(fMCParticleMap->At(i));
     }
-    delete rarray;
     return mcParticle;
 }
 
index 3f92b34488ca869e9ccd81c91a186c3e2a06b39c..ffb377d2f48e2e930b87468b6e2fb2344a783b9b 100644 (file)
@@ -45,22 +45,40 @@ AliMCParticle::AliMCParticle(TParticle* part, TRefArray* rarray):
 {
     // Constructor
     if (rarray != 0) {
-       fNTrackRef = fTrackReferences->GetEntriesFast();
+      fNTrackRef = fTrackReferences->GetEntriesFast();
     }
 }
     
     
 AliMCParticle::AliMCParticle(const AliMCParticle& mcPart) :
     AliVParticle(mcPart),
-    fParticle(0)
+    fParticle(0),    
+    fTrackReferences(0),
+    fNTrackRef(0)
 {
 // Copy constructor
 }
 
 AliMCParticle& AliMCParticle::operator=(const AliMCParticle& mcPart)
-{ if (this!=&mcPart) { 
-    AliVParticle::operator=(mcPart); 
+{ 
+
+  if (this!=&mcPart) { 
+    AliVParticle::operator=(mcPart);
   }
   
   return *this; 
 }
+
+AliMCParticle::~AliMCParticle()
+{ 
+  // delete the track references passed externally
+  // fParticle should be handled by the user
+  // AliStack in case of AliMCEventHandler
+  if(fTrackReferences){
+    delete fTrackReferences;
+    fTrackReferences = 0;
+  }
+}
+
+
+
index 0b1b3ccb1eeff3243cefb9bc68bf3d46cc1ebc7c..28ee832fdc73bec01f8287cd80884b3426a624cb 100644 (file)
@@ -22,7 +22,7 @@ class AliMCParticle: public AliVParticle {
 public:
     AliMCParticle();
     AliMCParticle(TParticle* part, TRefArray* rarray = 0);
-    virtual ~AliMCParticle() {}
+    virtual ~AliMCParticle();
     AliMCParticle(const AliMCParticle& mcPart); 
     AliMCParticle& operator=(const AliMCParticle& mcPart);
     
@@ -57,7 +57,7 @@ public:
     // Track References
     Int_t              GetNumberOfTrackReferences() {return fNTrackRef;}
     AliTrackReference* GetTrackReference(Int_t i)
-       {return dynamic_cast<AliTrackReference*>((*fTrackReferences)[i]);}
+      {return dynamic_cast<AliTrackReference*>((*fTrackReferences)[i]);}
  private:
     TParticle *fParticle;             // The wrapped TParticle
     TRefArray *fTrackReferences;      // Reference array to track references