Fix memory leak
authorcblume <cblume@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 19 Jun 2009 07:59:00 +0000 (07:59 +0000)
committercblume <cblume@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 19 Jun 2009 07:59:00 +0000 (07:59 +0000)
TRD/AliTRDmcmSim.cxx

index a6a5fd4..9f070f7 100644 (file)
@@ -13,6 +13,8 @@
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
+/* $Id$ */
+
 ///////////////////////////////////////////////////////////////////////////////
 //                                                                           //
 //  TRD MCM (Multi Chip Module) simulator                                    //
@@ -222,6 +224,7 @@ Bool_t AliTRDmcmSim::LoadMCM(AliRunLoader* const runloader, Int_t det, Int_t rob
     return kFALSE;
   }
 
+  Bool_t retval = kTRUE;
   trdLoader->LoadDigits();
   fDigitsManager = 0x0;
   AliTRDdigitsManager *digMgr = new AliTRDdigitsManager();
@@ -229,34 +232,37 @@ Bool_t AliTRDmcmSim::LoadMCM(AliRunLoader* const runloader, Int_t det, Int_t rob
   digMgr->CreateArrays();
   digMgr->ReadDigits(trdLoader->TreeD());
   AliTRDarrayADC *digits = (AliTRDarrayADC*) digMgr->GetDigits(det);
-  if (!digits->HasData())
-    return kFALSE;
-  digits->Expand();
-
-  Int_t padrow = fFeeParam->GetPadRowFromMCM(rob, mcm);
-  Int_t padcol = 0;
-  for (Int_t ch = 0; ch < fNADC; ch++) {
-    padcol = GetCol(ch);
-    for (Int_t tb = 0; tb < fNTimeBin; tb++) {
-      if (padcol < 0) {
-        fADCR[ch][tb] = 0;
-        fADCF[ch][tb] = 0;
-      }
-      else {
-        if (digits->GetData(padrow,padcol, tb) < 0) {
-          fADCR[ch][tb] = 0;
-          fADCF[ch][tb] = 0;
-        }
-        else {
-          fADCR[ch][tb] = digits->GetData(padrow, padcol, tb) << fgkAddDigits;
-          fADCF[ch][tb] = digits->GetData(padrow, padcol, tb) << fgkAddDigits;
-        }
+  if (digits->HasData()) {
+    digits->Expand();
+
+    Int_t padrow = fFeeParam->GetPadRowFromMCM(rob, mcm);
+    Int_t padcol = 0;
+    for (Int_t ch = 0; ch < fNADC; ch++) {
+      padcol = GetCol(ch);
+      for (Int_t tb = 0; tb < fNTimeBin; tb++) {
+       if (padcol < 0) {
+         fADCR[ch][tb] = 0;
+         fADCF[ch][tb] = 0;
+       }
+       else {
+         if (digits->GetData(padrow,padcol, tb) < 0) {
+           fADCR[ch][tb] = 0;
+           fADCF[ch][tb] = 0;
+         }
+         else {
+           fADCR[ch][tb] = digits->GetData(padrow, padcol, tb) << fgkAddDigits;
+           fADCF[ch][tb] = digits->GetData(padrow, padcol, tb) << fgkAddDigits;
+         }
+       }
       }
     }
   }
+  else 
+    retval = kFALSE;
+
   delete digMgr;
 
-  return kTRUE;
+  return kFALSE;
 }
 
 void AliTRDmcmSim::NoiseTest(Int_t nsamples, Int_t mean, Int_t sigma, Int_t inputGain, Int_t inputTail)
@@ -1293,7 +1299,7 @@ void AliTRDmcmSim::CalcFitreg()
             }
             AliTRDarrayDictionary *dict = (AliTRDarrayDictionary*) fDigitsManager->GetDictionary(fDetector, iDict);
             if (dict->GetDim() == 0) {
-              AliError("Dictionary has dim. 0");
+              AliError(Form("Dictionary %i of det. %i has dim. 0", fDetector, iDict));
               continue;
             }
             dict->Expand();