]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
fix a memory leak coming from the TRD stand alone track finder (Markus)
authorabercuci <abercuci@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 25 Aug 2008 14:57:22 +0000 (14:57 +0000)
committerabercuci <abercuci@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 25 Aug 2008 14:57:22 +0000 (14:57 +0000)
TRD/AliTRDtrackV1.cxx
TRD/AliTRDtrackV1.h
TRD/AliTRDtrackerV1.cxx

index 243c389954d9890e1afdcff1119c19be1dbad118..8d550fd2fb8113afb03213f8f03942f9b4fc0c1c 100644 (file)
@@ -596,6 +596,15 @@ void AliTRDtrackV1::SetTracklet(AliTRDseedV1 *trklt, Int_t index)
   fTrackletIndex[plane] = index;
 }
 
+//_______________________________________________________________
+void AliTRDtrackV1::UnsetTracklet(Int_t plane)
+{
+  if(plane<0 && plane >= kNplane) return;
+  fTrackletIndex[plane] = 0xffff;
+  fTracklet[plane] = 0x0;
+}
+
+
 //_______________________________________________________________
 Bool_t  AliTRDtrackV1::Update(AliTRDseedV1 *trklt, Double_t chisq)
 {
index 4d0b35ab0e1d880f95c6a92c9184bb9d1199db87..e090ae4d3e6d9249858d6ff3d408d6434f6dbfb7 100644 (file)
@@ -86,6 +86,7 @@ public:
   void           SetTracklet(AliTRDseedV1 *trklt,  Int_t index);
   inline void    SetReconstructor(const AliTRDReconstructor *rec);
   inline Float_t StatusForTOF();
+  void           UnsetTracklet(Int_t plane);
   Bool_t         Update(AliTRDseedV1 *tracklet, Double_t chi2);
   //Bool_t         Update(const AliTRDcluster *c, Double_t chi2, Int_t index, Double_t h01){ return AliTRDtrack::Update(c,chi2,index,h01); };
   Bool_t         Update(const AliCluster *, Double_t, Int_t)                        { return kFALSE; };
index 34dffd2da8ea9ee71daa1c7daa24136f06405422..70c16dddf007202244f63ff7a4096c0ab8c5fcf9 100644 (file)
@@ -599,12 +599,19 @@ Int_t AliTRDtrackerV1::FollowBackProlongation(AliTRDtrackV1 &t)
   AliTRDtrackingChamber *chamber = 0x0;
   
   AliTRDseedV1 tracklet, *ptrTracklet = 0x0;
+  // in case of stand alone tracking we store all the pointers to the tracklets in a temporary array
+  AliTRDseedV1 *tracklets[kNPlanes];
+  memset(tracklets, 0, sizeof(AliTRDseedV1 *) * kNPlanes);
+  for(Int_t ip = 0; ip < kNPlanes; ip++){
+    tracklets[ip] = t.GetTracklet(ip);
+    t.UnsetTracklet(ip);
+  } 
 
   // Loop through the TRD layers
   for (Int_t ilayer = 0; ilayer < AliTRDgeometry::Nlayer(); ilayer++) {
     // BUILD TRACKLET IF NOT ALREADY BUILT
     Double_t x = 0., y, z, alpha;
-    ptrTracklet  = t.GetTracklet(ilayer);
+    ptrTracklet  = tracklets[ilayer];
     if(!ptrTracklet){
       ptrTracklet = new(&tracklet) AliTRDseedV1(ilayer);
       ptrTracklet->SetReconstructor(fReconstructor);