Remove TObject::Clone calls (JIRA 4874)
authorrgrosso <Raffaele.Grosso@cern.ch>
Thu, 13 Mar 2014 21:42:56 +0000 (22:42 +0100)
committerhristov <Peter.Hristov@cern.ch>
Thu, 27 Mar 2014 15:25:01 +0000 (16:25 +0100)
When filling the array of valid file ids, avoid calling
AliCDBId::Clone()
it has unpredictable effects (on SLC6 and with root v4-34-11
it was crashing the mchview executable).

STEER/CDB/AliCDBGrid.cxx
STEER/CDB/AliCDBLocal.cxx

index 706820b..f2066f3 100644 (file)
@@ -388,7 +388,7 @@ AliCDBId* AliCDBGrid::GetId(const TObjArray& validFileIds, const AliCDBId& query
               query.GetFirstRun(), anIdPtr->GetVersion()));
         return NULL;
       }
-      result = anIdPtr;
+      result = new AliCDBId(*anIdPtr);
     } else { // look for specified version
       if(query.GetVersion() != anIdPtr->GetVersion()) continue;
       if(result && result->GetVersion() == anIdPtr->GetVersion()){
@@ -396,14 +396,12 @@ AliCDBId* AliCDBGrid::GetId(const TObjArray& validFileIds, const AliCDBId& query
               query.GetFirstRun(), anIdPtr->GetVersion()));
         return NULL;
       }
-      result = anIdPtr;
+      result = new AliCDBId(*anIdPtr);
     }
 
   }
 
-  if (!result) return NULL;
-
-  return dynamic_cast<AliCDBId*> (result->Clone());
+  return result;
 }
 
 //_____________________________________________________________________________
@@ -454,12 +452,12 @@ AliCDBId* AliCDBGrid::GetEntryId(const AliCDBId& queryId) {
     AliDebug(2,Form("** fDBFolder = %s, pattern = %s, filter = %s",folderCopy.Data(), pattern.Data(), filter.Data()));
     TGridResult *res = gGrid->Query(folderCopy, pattern, filter, optionQuery.Data());
     if (res) {
-      AliCDBId validFileId;
       for(int i=0; i<res->GetEntries(); i++){
+        AliCDBId *validFileId = new AliCDBId();
         TString filename = res->GetKey(i, "lfn");
         if(filename == "") continue;
-        if(FilenameToId(filename, validFileId))
-          validFileIds.AddLast(validFileId.Clone());
+        if(FilenameToId(filename, *validFileId))
+          validFileIds.AddLast(validFileId);
       }
       delete res;
     }else{
@@ -651,12 +649,12 @@ TList* AliCDBGrid::GetEntries(const AliCDBId& queryId) {
       return 0;
     }
 
-    AliCDBId validFileId;
     for(int i=0; i<res->GetEntries(); i++){
+      AliCDBId *validFileId = new AliCDBId();
       TString filename = res->GetKey(i, "lfn");
       if(filename == "") continue;
-      if(FilenameToId(filename, validFileId))
-        validFileIds.AddLast(validFileId.Clone());
+      if(FilenameToId(filename, *validFileId))
+        validFileIds.AddLast(validFileId);
     }
     delete res;
   }
@@ -1124,7 +1122,7 @@ void AliCDBGrid::QueryValidFiles()
       TString& filename = entry->String();
       if(filename.IsNull()) continue;
       AliDebug(2,Form("Found valid file: %s", filename.Data()));
-      AliCDBId *validFileId = new AliCDBId;
+      AliCDBId *validFileId = new AliCDBId();
       Bool_t result = FilenameToId(filename, *validFileId);
       if(result) {
         fValidFileIds.AddLast(validFileId);
index fc911fd..c2d4c40 100644 (file)
@@ -256,12 +256,11 @@ AliCDBId* AliCDBLocal::GetId(const AliCDBId& query) {
 
     while((anIdPtr = dynamic_cast<AliCDBId*> (iter.Next()))){
       if(anIdPtr->GetPath() == query.GetPath()){
-        result = anIdPtr;
+        result = new AliCDBId(*anIdPtr);
         break;
       }
     }
-    if (result)
-      return dynamic_cast<AliCDBId*> (result->Clone());
+    return result;
   }
 
   // otherwise browse in the local filesystem CDB storage
@@ -897,8 +896,8 @@ void AliCDBLocal::QueryValidFiles() {
               }
               if(highestV >= 0){
                 AliCDBPath validPath(level0, level1, level2);
-                AliCDBId validId(validPath, aRunRange, highestV, highestSubV);
-                fValidFileIds.AddLast(validId.Clone());
+                AliCDBId *validId = new AliCDBId(validPath, aRunRange, highestV, highestSubV);
+                fValidFileIds.AddLast(validId);
               }
 
               gSystem->FreeDirectory(dirPtr);
@@ -1015,8 +1014,8 @@ void AliCDBLocal::QueryValidCVMFSFiles(TString& cvmfsOcdbTag) {
     AliCDBRunRange runrg(fRun,fRun);
     if (!aRunRange.Comprises(runrg)) continue; // should never happen (would mean awk script wrong output)
     // aRunRange contains requested run!
-    AliCDBId validId(validPath,aRunRange,aVersion,aSubVersion);
-    fValidFileIds.AddLast(validId.Clone());
+    AliCDBId *validId = new AliCDBId(validPath,aRunRange,aVersion,aSubVersion);
+    fValidFileIds.AddLast(validId);
   }
 
   file->close();