From 4d8f1bd9554b4c1e933db2195588aca32979a6c7 Mon Sep 17 00:00:00 2001 From: abercuci Date: Tue, 26 Oct 2010 06:55:41 +0000 Subject: [PATCH] fix memory leak from https://savannah.cern.ch/bugs/?72189 --- TRD/AliTRDtrackV1.cxx | 4 ++-- TRD/AliTRDtrackerV1.cxx | 15 ++++++++------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/TRD/AliTRDtrackV1.cxx b/TRD/AliTRDtrackV1.cxx index 5fc3d2f59be..8603d4960c5 100644 --- a/TRD/AliTRDtrackV1.cxx +++ b/TRD/AliTRDtrackV1.cxx @@ -214,8 +214,8 @@ AliTRDtrackV1::AliTRDtrackV1(AliTRDseedV1 * const trklts, const Double_t p[5], c //_______________________________________________________________ AliTRDtrackV1::~AliTRDtrackV1() { - //AliInfo(""); - //printf("I-AliTRDtrackV1::~AliTRDtrackV1() : Owner[%s]\n", TestBit(kOwner)?"YES":"NO"); + // Clean up all objects allocated by the track during its lifetime. + AliDebug(2, Form("Deleting track[%d]\n fBackupTrack[%p] fTrackLow[%p] fTrackHigh[%p] Owner[%c].", fESDid, (void*)fBackupTrack, (void*)fTrackLow, (void*)fTrackHigh, TestBit(kOwner)?'y':'n')); if(fBackupTrack) delete fBackupTrack; fBackupTrack = NULL; diff --git a/TRD/AliTRDtrackerV1.cxx b/TRD/AliTRDtrackerV1.cxx index e0d734862c6..334417376e4 100644 --- a/TRD/AliTRDtrackerV1.cxx +++ b/TRD/AliTRDtrackerV1.cxx @@ -318,6 +318,7 @@ Int_t AliTRDtrackerV1::PropagateBack(AliESDEvent *event) if ((status & AliESDtrack::kTRDout) != 0) continue; // Propagate to the entrance in the TRD mother volume + track.~AliTRDtrackV1(); new(&track) AliTRDtrackV1(*seed); if(AliTRDgeometry::GetXtrdBeg() > (fgkMaxStep + track.GetX()) && !PropagateToX(track, AliTRDgeometry::GetXtrdBeg(), fgkMaxStep)){ seed->UpdateTrackParams(&track, AliESDtrack::kTRDStop); @@ -331,9 +332,8 @@ Int_t AliTRDtrackerV1::PropagateBack(AliESDEvent *event) seed->UpdateTrackParams(&track, AliESDtrack::kTRDStop); continue; } - nTPCseeds++; - + AliDebug(2, Form("TRD propagate TPC seed[%d] = %d.", iSeed, index[iSeed])); // store track status at TRD entrance seed->UpdateTrackParams(&track, AliESDtrack::kTRDbackup); @@ -867,19 +867,20 @@ Int_t AliTRDtrackerV1::FollowBackProlongation(AliTRDtrackV1 &t) continue; } // build tracklet + tracklet.~AliTRDseedV1(); ptrTracklet = new(&tracklet) AliTRDseedV1(det); ptrTracklet->SetReconstructor(fkReconstructor); ptrTracklet->SetKink(t.IsKink()); ptrTracklet->SetPrimary(t.IsPrimary()); ptrTracklet->SetPadPlane(fGeom->GetPadPlane(ily, stk)); ptrTracklet->SetX0(glb[0]+driftLength); - if(!tracklet.Init(&t)){ + if(!ptrTracklet->Init(&t)){ n=-1; t.SetStatus(AliTRDtrackV1::kTrackletInit); AliDebug(4, "Failed Tracklet Init"); break; } - if(!tracklet.AttachClusters(chamber, kTRUE)){ + if(!ptrTracklet->AttachClusters(chamber, kTRUE)){ t.SetStatus(AliTRDtrackV1::kNoAttach, ily); if(debugLevel>3){ AliTRDseedV1 trackletCp(*ptrTracklet); @@ -892,8 +893,8 @@ Int_t AliTRDtrackerV1::FollowBackProlongation(AliTRDtrackV1 &t) AliDebug(4, "Failed Attach Clusters"); continue; } - AliDebug(3, Form("Number of Clusters in Tracklet: %d", tracklet.GetN())); - if(tracklet.GetN() < fgNTimeBins*fkRecoParam ->GetFindableClusters()){ + AliDebug(3, Form("Number of Clusters in Tracklet: %d", ptrTracklet->GetN())); + if(ptrTracklet->GetN() < fgNTimeBins*fkRecoParam->GetFindableClusters()){ t.SetStatus(AliTRDtrackV1::kNoClustersTracklet, ily); if(debugLevel>3){ AliTRDseedV1 trackletCp(*ptrTracklet); @@ -982,7 +983,7 @@ Int_t AliTRDtrackerV1::FollowBackProlongation(AliTRDtrackV1 &t) AliTracker::FillResiduals(&t, p, cov, ptrTracklet->GetVolumeId()); - // load tracklet to the tracker + // register tracklet with the tracker and track ptrTracklet->Update(&t); ptrTracklet = SetTracklet(ptrTracklet); Int_t index(fTracklets->GetEntriesFast()-1); -- 2.43.0