From bc211f36427a9d2ac24f6e6a1d3ec0cf5ec52860 Mon Sep 17 00:00:00 2001
From: Florian Uhlig <f.uhlig@gsi.de>
Date: Thu, 11 Feb 2021 17:55:09 +0100
Subject: [PATCH] littrack: Add gFile + gDirectory protection

---
 .../littrack/cbm/qa/clustering/CbmLitClusteringQa.cxx | 10 ++++++++--
 reco/littrack/clustering/CbmMuchClustering.cxx        | 11 +++++++++--
 2 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/reco/littrack/cbm/qa/clustering/CbmLitClusteringQa.cxx b/reco/littrack/cbm/qa/clustering/CbmLitClusteringQa.cxx
index 38b31a674e..4fa3e3fa43 100644
--- a/reco/littrack/cbm/qa/clustering/CbmLitClusteringQa.cxx
+++ b/reco/littrack/cbm/qa/clustering/CbmLitClusteringQa.cxx
@@ -152,12 +152,18 @@ void CbmLitClusteringQa::Finish() {
 
 void CbmLitClusteringQa::InitMuchGeoScheme(const string& digiFileName) {
   if (fDet.GetDet(ECbmModuleId::kMuch) && fMuchDigiFileName != "") {
-    TFile* oldfile      = gFile;
+    /// Save old global file and folder pointer to avoid messing with FairRoot
+    TFile* oldFile     = gFile;
+    TDirectory* oldDir = gDirectory;
+
     TFile* file         = new TFile(digiFileName.c_str());
     TObjArray* stations = (TObjArray*) file->Get("stations");
     file->Close();
     file->Delete();
-    gFile = oldfile;
+
+    /// Restore old global file and folder pointer to avoid messing with FairRoot
+    gFile      = oldFile;
+    gDirectory = oldDir;
     CbmMuchGeoScheme::Instance()->Init(stations, 0);
   }
 }
diff --git a/reco/littrack/clustering/CbmMuchClustering.cxx b/reco/littrack/clustering/CbmMuchClustering.cxx
index 467ffe2988..3ac845991d 100644
--- a/reco/littrack/clustering/CbmMuchClustering.cxx
+++ b/reco/littrack/clustering/CbmMuchClustering.cxx
@@ -74,12 +74,19 @@ InitStatus CbmMuchClustering::Init() {
   std::cout << "CbmMuchClustering::Init" << std::endl;
 
   // Initialize GeoScheme
-  TFile* oldfile      = gFile;
+  /// Save old global file and folder pointer to avoid messing with FairRoot
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
   TFile* file         = new TFile(fDigiFile);
   TObjArray* stations = (TObjArray*) file->Get("stations");
   file->Close();
   file->Delete();
-  gFile = oldfile;
+
+  /// Restore old global file and folder pointer to avoid messing with FairRoot
+  gFile      = oldFile;
+  gDirectory = oldDir;
+
   fScheme->Init(stations, 0);
   // Initialize arrays of objects
   ReadDataBranches();
-- 
GitLab