From e9947478fbda4e108d5e8f3f4da5501ced0b9776 Mon Sep 17 00:00:00 2001
From: Florian Uhlig <f.uhlig@gsi.de>
Date: Thu, 11 Feb 2021 17:45:20 +0100
Subject: [PATCH] core/report: Add gFile + gDirectory protection

---
 core/base/report/CbmSimulationReport.cxx | 19 +++++++++++++++----
 core/base/report/CbmStudyReport.cxx      | 10 +++++++++-
 2 files changed, 24 insertions(+), 5 deletions(-)

diff --git a/core/base/report/CbmSimulationReport.cxx b/core/base/report/CbmSimulationReport.cxx
index 9b3c53ba1b..e926794541 100644
--- a/core/base/report/CbmSimulationReport.cxx
+++ b/core/base/report/CbmSimulationReport.cxx
@@ -9,14 +9,16 @@
 #include "CbmHistManager.h"  // for CbmHistManager
 
 #include <RtypesCore.h>  // for UInt_t
-#include <TFile.h>       // for TFile
+#include <TDirectory.h>  // for TDirectory, gDirectory
+#include <TFile.h>       // for TFile, gFile
 #include <TH1.h>         // for TH1
 #include <TH2.h>         // for TH2
 
+#include <fstream>  // for string, ofstream
+#include <string>   // for operator+
+#include <vector>   // for vector, __vector_base<>::value_type
+
 #include <assert.h>  // for assert
-#include <fstream>   // for string, ofstream
-#include <string>    // for operator+
-#include <vector>    // for vector, __vector_base<>::value_type
 
 using std::ofstream;
 using std::string;
@@ -38,12 +40,21 @@ void CbmSimulationReport::Create(const string& fileName,
                                  const string& outputDir) {
   assert(fHM == nullptr);
   fHM         = new CbmHistManager();
+
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
   TFile* file = new TFile(fileName.c_str());
   fHM->ReadFromFile(file);
   SetOutputDir(outputDir);
   CreateReports();
   //   delete fHM;
   //   delete file;
+
+  // shouldn't the file be closed ????
+  //  file->Close();
+  gFile      = oldFile;
+  gDirectory = oldDir;
 }
 
 void CbmSimulationReport::DrawH1ByPattern(const string& histNamePattern) {
diff --git a/core/base/report/CbmStudyReport.cxx b/core/base/report/CbmStudyReport.cxx
index c8ad0e56ef..6e9c85d2fe 100644
--- a/core/base/report/CbmStudyReport.cxx
+++ b/core/base/report/CbmStudyReport.cxx
@@ -7,7 +7,8 @@
 
 #include "CbmHistManager.h"  // for CbmHistManager
 
-#include <TFile.h>  // for TFile
+#include <TDirectory.h>  // for TDirectory, gDirectory
+#include <TFile.h>       // for TFile, gFile
 
 #include <cassert>  // for assert
 #include <fstream>  // for string, ofstream, stringstream
@@ -40,6 +41,10 @@ void CbmStudyReport::Create(const vector<string>& fileNames,
   Int_t nofStudies = fileNames.size();
   vector<TFile*> files(nofStudies);
   fHM.resize(nofStudies);
+
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
   for (Int_t i = 0; i < nofStudies; i++) {
     fHM[i]   = new CbmHistManager();
     files[i] = new TFile(fileNames[i].c_str());
@@ -59,6 +64,9 @@ void CbmStudyReport::Create(const vector<string>& fileNames,
   //	}
   //	fHM.clear();
   //	files.clear();
+
+  gFile      = oldFile;
+  gDirectory = oldDir;
 }
 
 ClassImp(CbmStudyReport)
-- 
GitLab