Fixed leak in reading ESD friends with AliESDInputHandler
authoragheata <Andrei.Gheata@cern.ch>
Wed, 7 May 2014 16:21:15 +0000 (18:21 +0200)
committeragheata <Andrei.Gheata@cern.ch>
Wed, 7 May 2014 16:21:15 +0000 (18:21 +0200)
STEER/ESD/AliESDInputHandler.cxx
STEER/ESD/AliESDfriend.cxx
STEER/ESD/AliESDfriend.h

index 28ee6eb..f970399 100644 (file)
@@ -172,20 +172,20 @@ void AliESDInputHandler::ConnectFriends()
   //
   // Handle the friends first
   //
-  if (!fTree->FindBranch("ESDfriend.")) {
+  TTree* cTree = fTree->GetTree();
+  if (!cTree) cTree = fTree;      
+  if (!cTree->FindBranch("ESDfriend.")) {
     // Try to add ESDfriend. branch as friend
-      TString esdFriendTreeFName;
-      esdFriendTreeFName = (fTree->GetCurrentFile())->GetName();    
-      TString basename = gSystem->BaseName(esdFriendTreeFName);
-      Int_t index = basename.Index("#")+1;
-      basename.Remove(index);
-      basename += fFriendFileName;
-      TString dirname = gSystem->DirName(esdFriendTreeFName);
-      dirname += "/";
-      esdFriendTreeFName = dirname + basename;
-
-    TTree* cTree = fTree->GetTree();
-    if (!cTree) cTree = fTree;      
+    TString esdFriendTreeFName;
+    esdFriendTreeFName = (fTree->GetCurrentFile())->GetName();    
+    TString basename = gSystem->BaseName(esdFriendTreeFName);
+    Int_t index = basename.Index("#")+1;
+    basename.Remove(index);
+    basename += fFriendFileName;
+    TString dirname = gSystem->DirName(esdFriendTreeFName);
+    dirname += "/";
+    esdFriendTreeFName = dirname + basename;
+
     cTree->AddFriend("esdFriendTree", esdFriendTreeFName.Data());
     cTree->SetBranchStatus("ESDfriend.", 1);
     fFriend = (AliESDfriend*)(fEvent->FindListObject("AliESDfriend"));
@@ -198,6 +198,7 @@ Bool_t  AliESDInputHandler::FinishEvent()
 {
     // Finish the event 
   if(fEvent)fEvent->Reset();
+  if (fFriend) fFriend->Reset();
   if (fMixingHandler) fMixingHandler->FinishEvent();
   return kTRUE;
 } 
index 2f0477f..32bf39b 100644 (file)
@@ -91,6 +91,21 @@ AliESDfriend::~AliESDfriend() {
 }
 
 
+void AliESDfriend::Reset()
+{
+  //
+  // Reset friend information
+  //
+  fTracks.Delete();
+  for (Int_t i=0;i<72;i++)
+  {
+    fNclustersTPC[i]=0;
+    fNclustersTPCused[i]=0;
+  }
+  delete fESDVZEROfriend; fESDVZEROfriend=0;
+  delete fESDTZEROfriend; fESDTZEROfriend=0;
+}  
+
 
 void AliESDfriend::SetVZEROfriend(AliESDVZEROfriend * obj)
 {
index 2d3fdcb..530389e 100644 (file)
@@ -45,6 +45,7 @@ public:
          return fTracks.ls();
   }
 
+  void Reset();
   // bit manipulation for filtering
   void SetSkipBit(Bool_t skip){SetBit(23,skip);}
   Bool_t TestSkipBit() {return TestBit(23);}