From 3d20c3d5f591d84c0806d621aad77c64c102a937 Mon Sep 17 00:00:00 2001
From: Florian Uhlig <f.uhlig@gsi.de>
Date: Fri, 12 Feb 2021 13:45:54 +0100
Subject: [PATCH] Rework gFile + gDirectory protection

Add gDirectory protection in any case even if directory is not changed.
For some files gFile an gDirectory where only set back if file was opened.
Restore the original values in any case ebven if not necessary.
---
 .../monitor/CbmCheckDataFormatGdpb2018.cxx         |  7 ++++---
 .../monitor/CbmMcbm2018MonitorDataRates.cxx        |  7 ++++---
 .../monitor/CbmMcbm2018MonitorMcbmPulser.cxx       |  7 ++++---
 .../monitor/CbmMcbm2018MonitorMcbmRate.cxx         |  7 ++++---
 .../monitor/CbmMcbm2018MonitorMcbmSync.cxx         |  7 ++++---
 fles/mcbm2018/monitor/CbmMcbm2018MonitorMuch.cxx   |  7 ++++---
 .../monitor/CbmMcbm2018MonitorMuchLite.cxx         |  7 ++++---
 fles/mcbm2018/monitor/CbmMcbm2018MonitorSts.cxx    |  7 ++++---
 .../monitor/CbmMcbm2018MonitorStsPulser.cxx        |  7 ++++---
 .../mcbm2018/monitor/CbmMcbm2018MonitorStsSync.cxx | 14 ++++++++------
 fles/mcbm2018/monitor/CbmMcbm2018MonitorTof.cxx    |  7 ++++---
 .../monitor/CbmMcbm2018MonitorTofPulser.cxx        |  7 ++++---
 fles/mcbm2018/monitor/CbmMcbm2018TofFeeThr.cxx     |  7 ++++---
 fles/mcbm2018/monitor/CbmMcbm2018TofTestFee.cxx    |  7 ++++---
 fles/mcbm2018/tasks/CbmCheckDigisNbCorr.cxx        |  8 ++++++--
 fles/mcbm2018/tasks/CbmCheckEvents.cxx             |  8 ++++++--
 fles/mcbm2018/tasks/CbmMcbm2018EventBuilder.cxx    |  8 ++++++--
 fles/mcbm2018/tasks/CbmMcbm2019CheckDigisMuch.cxx  |  8 ++++++--
 fles/mcbm2018/tasks/CbmMcbm2019CheckDigisSts.cxx   |  8 ++++++--
 fles/mcbm2018/tasks/CbmMcbm2019CheckDtInDet.cxx    | 10 +++++++---
 fles/mcbm2018/tasks/CbmMcbm2019CheckPulser.cxx     |  9 ++++++---
 .../mcbm2018/tasks/CbmMcbm2019CheckTimingPairs.cxx |  9 ++++++---
 .../tasks/CbmMcbm2019TimeWinEventBuilderTask.cxx   |  5 +++--
 fles/mcbm2018/tasks/CbmMcbmCheckTimingAlgo.cxx     |  8 ++++++--
 fles/mcbm2018/tasks/CbmMcbmCheckTimingTask.cxx     | 11 ++++++-----
 .../unpacker/CbmMcbm2018UnpackerTaskTrdR.cxx       |  7 ++++---
 26 files changed, 128 insertions(+), 76 deletions(-)

diff --git a/fles/mcbm2018/monitor/CbmCheckDataFormatGdpb2018.cxx b/fles/mcbm2018/monitor/CbmCheckDataFormatGdpb2018.cxx
index 9766005407..ab09f0795b 100644
--- a/fles/mcbm2018/monitor/CbmCheckDataFormatGdpb2018.cxx
+++ b/fles/mcbm2018/monitor/CbmCheckDataFormatGdpb2018.cxx
@@ -1367,10 +1367,11 @@ void CbmCheckDataFormatGdpb2018::SaveAllHistos(TString sFileName) {
   if ("" != sFileName) {
     // Restore original directory position
     histoFile->Close();
-    /// Restore old global file and folder pointer to avoid messing with FairRoot
-    gFile      = oldFile;
-    gDirectory = oldDir;
   }  // if( "" != sFileName )
+
+  /// Restore old global file and folder pointer to avoid messing with FairRoot
+  gFile      = oldFile;
+  gDirectory = oldDir;
 }
 
 void CbmCheckDataFormatGdpb2018::ResetAllHistos() {
diff --git a/fles/mcbm2018/monitor/CbmMcbm2018MonitorDataRates.cxx b/fles/mcbm2018/monitor/CbmMcbm2018MonitorDataRates.cxx
index c5708cde3e..af06f1eefd 100644
--- a/fles/mcbm2018/monitor/CbmMcbm2018MonitorDataRates.cxx
+++ b/fles/mcbm2018/monitor/CbmMcbm2018MonitorDataRates.cxx
@@ -646,10 +646,11 @@ void CbmMcbm2018MonitorDataRates::SaveAllHistos(TString sFileName) {
   if ("" != sFileName) {
     // Restore original directory position
     histoFile->Close();
-    /// Restore old global file and folder pointer to avoid messing with FairRoot
-    gFile      = oldFile;
-    gDirectory = oldDir;
   }  // if( "" != sFileName )
+
+  /// Restore old global file and folder pointer to avoid messing with FairRoot
+  gFile      = oldFile;
+  gDirectory = oldDir;
 }
 
 void CbmMcbm2018MonitorDataRates::ResetAllHistos() {
diff --git a/fles/mcbm2018/monitor/CbmMcbm2018MonitorMcbmPulser.cxx b/fles/mcbm2018/monitor/CbmMcbm2018MonitorMcbmPulser.cxx
index 6c6b2b821f..1e1e229b0a 100644
--- a/fles/mcbm2018/monitor/CbmMcbm2018MonitorMcbmPulser.cxx
+++ b/fles/mcbm2018/monitor/CbmMcbm2018MonitorMcbmPulser.cxx
@@ -1442,10 +1442,11 @@ void CbmMcbm2018MonitorMcbmPulser::SaveAllHistos(TString sFileName) {
   if ("" != sFileName) {
     // Restore original directory position
     histoFile->Close();
-    /// Restore old global file and folder pointer to avoid messing with FairRoot
-    gFile      = oldFile;
-    gDirectory = oldDir;
   }  // if( "" != sFileName )
+
+  /// Restore old global file and folder pointer to avoid messing with FairRoot
+  gFile      = oldFile;
+  gDirectory = oldDir;
 }
 void CbmMcbm2018MonitorMcbmPulser::ResetAllHistos() {
   /****************** STS Sync ******************************************/
diff --git a/fles/mcbm2018/monitor/CbmMcbm2018MonitorMcbmRate.cxx b/fles/mcbm2018/monitor/CbmMcbm2018MonitorMcbmRate.cxx
index 3949008b90..3f35bd67de 100644
--- a/fles/mcbm2018/monitor/CbmMcbm2018MonitorMcbmRate.cxx
+++ b/fles/mcbm2018/monitor/CbmMcbm2018MonitorMcbmRate.cxx
@@ -1332,10 +1332,11 @@ void CbmMcbm2018MonitorMcbmRate::SaveAllHistos(TString sFileName) {
   if ("" != sFileName) {
     // Restore original directory position
     histoFile->Close();
-    /// Restore old global file and folder pointer to avoid messing with FairRoot
-    gFile      = oldFile;
-    gDirectory = oldDir;
   }  // if( "" != sFileName )
+
+  /// Restore old global file and folder pointer to avoid messing with FairRoot
+  gFile      = oldFile;
+  gDirectory = oldDir;
 }
 void CbmMcbm2018MonitorMcbmRate::ResetAllHistos() {
   /****************** STS Sync ******************************************/
diff --git a/fles/mcbm2018/monitor/CbmMcbm2018MonitorMcbmSync.cxx b/fles/mcbm2018/monitor/CbmMcbm2018MonitorMcbmSync.cxx
index a2932495aa..5132d801d0 100644
--- a/fles/mcbm2018/monitor/CbmMcbm2018MonitorMcbmSync.cxx
+++ b/fles/mcbm2018/monitor/CbmMcbm2018MonitorMcbmSync.cxx
@@ -1592,10 +1592,11 @@ void CbmMcbm2018MonitorMcbmSync::SaveAllHistos(TString sFileName) {
   if ("" != sFileName) {
     // Restore original directory position
     histoFile->Close();
-    /// Restore old global file and folder pointer to avoid messing with FairRoot
-    gFile      = oldFile;
-    gDirectory = oldDir;
   }  // if( "" != sFileName )
+
+  /// Restore old global file and folder pointer to avoid messing with FairRoot
+  gFile      = oldFile;
+  gDirectory = oldDir;
 }
 void CbmMcbm2018MonitorMcbmSync::ResetAllHistos() {
   /****************** STS Sync ******************************************/
diff --git a/fles/mcbm2018/monitor/CbmMcbm2018MonitorMuch.cxx b/fles/mcbm2018/monitor/CbmMcbm2018MonitorMuch.cxx
index 7f87df29a2..a788a645bc 100644
--- a/fles/mcbm2018/monitor/CbmMcbm2018MonitorMuch.cxx
+++ b/fles/mcbm2018/monitor/CbmMcbm2018MonitorMuch.cxx
@@ -2060,10 +2060,11 @@ void CbmMcbm2018MonitorMuch::SaveAllHistos(TString sFileName) {
   if ("" != sFileName) {
     // Restore original directory position
     histoFile->Close();
-    /// Restore old global file and folder pointer to avoid messing with FairRoot
-    gFile      = oldFile;
-    gDirectory = oldDir;
   }  // if( "" != sFileName )
+
+  /// Restore old global file and folder pointer to avoid messing with FairRoot
+  gFile      = oldFile;
+  gDirectory = oldDir;
 }
 void CbmMcbm2018MonitorMuch::ResetAllHistos() {
   LOG(info) << "Reseting all STS histograms.";
diff --git a/fles/mcbm2018/monitor/CbmMcbm2018MonitorMuchLite.cxx b/fles/mcbm2018/monitor/CbmMcbm2018MonitorMuchLite.cxx
index 9f09fc3cab..d37d5f5fa6 100644
--- a/fles/mcbm2018/monitor/CbmMcbm2018MonitorMuchLite.cxx
+++ b/fles/mcbm2018/monitor/CbmMcbm2018MonitorMuchLite.cxx
@@ -1653,10 +1653,11 @@ void CbmMcbm2018MonitorMuchLite::SaveAllHistos(TString sFileName) {
   if ("" != sFileName) {
     // Restore original directory position
     histoFile->Close();
-    /// Restore old global file and folder pointer to avoid messing with FairRoot
-    gFile      = oldFile;
-    gDirectory = oldDir;
   }  // if( "" != sFileName )
+
+  /// Restore old global file and folder pointer to avoid messing with FairRoot
+  gFile      = oldFile;
+  gDirectory = oldDir;
 }
 
 void CbmMcbm2018MonitorMuchLite::ResetAllHistos() {
diff --git a/fles/mcbm2018/monitor/CbmMcbm2018MonitorSts.cxx b/fles/mcbm2018/monitor/CbmMcbm2018MonitorSts.cxx
index 71c83655ba..8416ea06d6 100644
--- a/fles/mcbm2018/monitor/CbmMcbm2018MonitorSts.cxx
+++ b/fles/mcbm2018/monitor/CbmMcbm2018MonitorSts.cxx
@@ -2703,10 +2703,11 @@ void CbmMcbm2018MonitorSts::SaveAllHistos(TString sFileName) {
   if ("" != sFileName) {
     // Restore original directory position
     histoFile->Close();
-    /// Restore old global file and folder pointer to avoid messing with FairRoot
-    gFile      = oldFile;
-    gDirectory = oldDir;
   }  // if( "" != sFileName )
+
+  /// Restore old global file and folder pointer to avoid messing with FairRoot
+  gFile      = oldFile;
+  gDirectory = oldDir;
 }
 void CbmMcbm2018MonitorSts::ResetAllHistos() {
   LOG(info) << "Reseting all STS histograms.";
diff --git a/fles/mcbm2018/monitor/CbmMcbm2018MonitorStsPulser.cxx b/fles/mcbm2018/monitor/CbmMcbm2018MonitorStsPulser.cxx
index b548473046..70b9a39368 100644
--- a/fles/mcbm2018/monitor/CbmMcbm2018MonitorStsPulser.cxx
+++ b/fles/mcbm2018/monitor/CbmMcbm2018MonitorStsPulser.cxx
@@ -1403,10 +1403,11 @@ void CbmCosy2018MonitorPulser::SaveAllHistos(TString sFileName) {
   if ("" != sFileName) {
     // Restore original directory position
     histoFile->Close();
-    /// Restore old global file and folder pointer to avoid messing with FairRoot
-    gFile      = oldFile;
-    gDirectory = oldDir;
   }  // if( "" != sFileName )
+
+  /// Restore old global file and folder pointer to avoid messing with FairRoot
+  gFile      = oldFile;
+  gDirectory = oldDir;
 }
 void CbmCosy2018MonitorPulser::ResetAllHistos() {
   LOG(info) << "Reseting all STS histograms.";
diff --git a/fles/mcbm2018/monitor/CbmMcbm2018MonitorStsSync.cxx b/fles/mcbm2018/monitor/CbmMcbm2018MonitorStsSync.cxx
index bb8f8d5be1..9114f57e5b 100644
--- a/fles/mcbm2018/monitor/CbmMcbm2018MonitorStsSync.cxx
+++ b/fles/mcbm2018/monitor/CbmMcbm2018MonitorStsSync.cxx
@@ -1897,10 +1897,11 @@ void CbmMcbm2018MonitorStsSync::SaveAllHistos(TString sFileName) {
   if ("" != sFileName) {
     // Restore original directory position
     histoFile->Close();
-    /// Restore old global file and folder pointer to avoid messing with FairRoot
-    gFile      = oldFile;
-    gDirectory = oldDir;
   }  // if( "" != sFileName )
+
+  /// Restore old global file and folder pointer to avoid messing with FairRoot
+  gFile      = oldFile;
+  gDirectory = oldDir;
 }
 void CbmMcbm2018MonitorStsSync::SavePulserHistos(TString sFileName) {
   /// Save old global file and folder pointer to avoid messing with FairRoot
@@ -1931,10 +1932,11 @@ void CbmMcbm2018MonitorStsSync::SavePulserHistos(TString sFileName) {
   if ("" != sFileName) {
     // Restore original directory position
     histoFile->Close();
-    /// Restore old global file and folder pointer to avoid messing with FairRoot
-    gFile      = oldFile;
-    gDirectory = oldDir;
   }  // if( "" != sFileName )
+
+  /// Restore old global file and folder pointer to avoid messing with FairRoot
+  gFile      = oldFile;
+  gDirectory = oldDir;
 }
 void CbmMcbm2018MonitorStsSync::ResetAllHistos() {
   LOG(info) << "Reseting all STS histograms.";
diff --git a/fles/mcbm2018/monitor/CbmMcbm2018MonitorTof.cxx b/fles/mcbm2018/monitor/CbmMcbm2018MonitorTof.cxx
index c11bcab45a..1de7fb8380 100644
--- a/fles/mcbm2018/monitor/CbmMcbm2018MonitorTof.cxx
+++ b/fles/mcbm2018/monitor/CbmMcbm2018MonitorTof.cxx
@@ -3563,10 +3563,11 @@ void CbmMcbm2018MonitorTof::SaveAllHistos(TString sFileName) {
   if ("" != sFileName) {
     // Restore original directory position
     histoFile->Close();
-    /// Restore old global file and folder pointer to avoid messing with FairRoot
-    gFile      = oldFile;
-    gDirectory = oldDir;
   }  // if( "" != sFileName )
+
+  /// Restore old global file and folder pointer to avoid messing with FairRoot
+  gFile      = oldFile;
+  gDirectory = oldDir;
 }
 
 void CbmMcbm2018MonitorTof::ResetAllHistos() {
diff --git a/fles/mcbm2018/monitor/CbmMcbm2018MonitorTofPulser.cxx b/fles/mcbm2018/monitor/CbmMcbm2018MonitorTofPulser.cxx
index e4e2819075..bb87352fd5 100644
--- a/fles/mcbm2018/monitor/CbmMcbm2018MonitorTofPulser.cxx
+++ b/fles/mcbm2018/monitor/CbmMcbm2018MonitorTofPulser.cxx
@@ -1666,10 +1666,11 @@ void CbmMcbm2018MonitorTofPulser::SaveAllHistos(TString sFileName) {
   if ("" != sFileName) {
     // Restore original directory position
     histoFile->Close();
-    /// Restore old global file and folder pointer to avoid messing with FairRoot
-    gFile      = oldFile;
-    gDirectory = oldDir;
   }  // if( "" != sFileName )
+
+  /// Restore old global file and folder pointer to avoid messing with FairRoot
+  gFile      = oldFile;
+  gDirectory = oldDir;
 }
 
 void CbmMcbm2018MonitorTofPulser::ResetAllHistos() {
diff --git a/fles/mcbm2018/monitor/CbmMcbm2018TofFeeThr.cxx b/fles/mcbm2018/monitor/CbmMcbm2018TofFeeThr.cxx
index 2657d60db6..36fc7876a2 100644
--- a/fles/mcbm2018/monitor/CbmMcbm2018TofFeeThr.cxx
+++ b/fles/mcbm2018/monitor/CbmMcbm2018TofFeeThr.cxx
@@ -528,10 +528,11 @@ void CbmMcbm2018TofFeeThr::SaveAllHistos(TString sFileName) {
   if ("" != sFileName) {
     // Restore original directory position
     histoFile->Close();
-    /// Restore old global file and folder pointer to avoid messing with FairRoot
-    gFile      = oldFile;
-    gDirectory = oldDir;
   }  // if( "" != sFileName )
+
+  /// Restore old global file and folder pointer to avoid messing with FairRoot
+  gFile      = oldFile;
+  gDirectory = oldDir;
 }
 
 void CbmMcbm2018TofFeeThr::ResetAllHistos() {
diff --git a/fles/mcbm2018/monitor/CbmMcbm2018TofTestFee.cxx b/fles/mcbm2018/monitor/CbmMcbm2018TofTestFee.cxx
index d893bc5fe2..87cbd73cfe 100644
--- a/fles/mcbm2018/monitor/CbmMcbm2018TofTestFee.cxx
+++ b/fles/mcbm2018/monitor/CbmMcbm2018TofTestFee.cxx
@@ -1914,10 +1914,11 @@ void CbmMcbm2018TofTestFee::SaveAllHistos(TString sFileName) {
   if ("" != sFileName) {
     // Restore original directory position
     histoFile->Close();
-    /// Restore old global file and folder pointer to avoid messing with FairRoot
-    gFile      = oldFile;
-    gDirectory = oldDir;
   }  // if( "" != sFileName )
+
+  /// Restore old global file and folder pointer to avoid messing with FairRoot
+  gFile      = oldFile;
+  gDirectory = oldDir;
 }
 
 void CbmMcbm2018TofTestFee::ResetAllHistos() {
diff --git a/fles/mcbm2018/tasks/CbmCheckDigisNbCorr.cxx b/fles/mcbm2018/tasks/CbmCheckDigisNbCorr.cxx
index 1908197eaa..62613aa695 100644
--- a/fles/mcbm2018/tasks/CbmCheckDigisNbCorr.cxx
+++ b/fles/mcbm2018/tasks/CbmCheckDigisNbCorr.cxx
@@ -20,6 +20,7 @@
 #include "TH2.h"
 #include "THttpServer.h"
 #include "TProfile.h"
+#include <TDirectory.h>
 #include <TFile.h>
 
 #include "CbmMuchDigi.h"
@@ -698,7 +699,9 @@ void CbmCheckDigisNbCorr::Exec(Option_t* /*option*/) {
 void CbmCheckDigisNbCorr::Finish() { WriteHistos(); }
 
 void CbmCheckDigisNbCorr::WriteHistos() {
-  TFile* old     = gFile;
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
   TFile* outfile = TFile::Open(fOutFileName, "RECREATE");
 
 
@@ -741,7 +744,8 @@ void CbmCheckDigisNbCorr::WriteHistos() {
   outfile->Close();
   delete outfile;
 
-  gFile = old;
+  gFile      = oldFile;
+  gDirectory = oldDir;
 }
 
 ClassImp(CbmCheckDigisNbCorr)
diff --git a/fles/mcbm2018/tasks/CbmCheckEvents.cxx b/fles/mcbm2018/tasks/CbmCheckEvents.cxx
index f954d3e579..35e2dc0ad3 100644
--- a/fles/mcbm2018/tasks/CbmCheckEvents.cxx
+++ b/fles/mcbm2018/tasks/CbmCheckEvents.cxx
@@ -24,6 +24,7 @@
 #include "TH2.h"
 #include "THttpServer.h"
 #include "TProfile.h"
+#include <TDirectory.h>
 #include <TFile.h>
 
 #include <iomanip>
@@ -264,7 +265,9 @@ void CbmCheckEvents::GetTimeDiffT0(CbmEvent* event, TH1* deltaT, TH1* size) {
 
 // ---- Finish --------------------------------------------------------
 void CbmCheckEvents::Finish() {
-  TFile* old     = gFile;
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
   TFile* outfile = TFile::Open("test2.root", "RECREATE");
 
   fEventSize->Write();
@@ -287,7 +290,8 @@ void CbmCheckEvents::Finish() {
   outfile->Close();
   delete outfile;
 
-  gFile = old;
+  gFile      = oldFile;
+  gDirectory = oldDir;
 }
 
 ClassImp(CbmCheckEvents)
diff --git a/fles/mcbm2018/tasks/CbmMcbm2018EventBuilder.cxx b/fles/mcbm2018/tasks/CbmMcbm2018EventBuilder.cxx
index d57aef935d..28ae219ea4 100644
--- a/fles/mcbm2018/tasks/CbmMcbm2018EventBuilder.cxx
+++ b/fles/mcbm2018/tasks/CbmMcbm2018EventBuilder.cxx
@@ -15,6 +15,7 @@
 #include "TH1.h"
 #include "TH2.h"
 #include "THttpServer.h"
+#include <TDirectory.h>
 #include <TFile.h>
 
 #include "CbmMuchBeamTimeDigi.h"
@@ -649,7 +650,9 @@ void CbmMcbm2018EventBuilder::AddDigiToSorter(ECbmModuleId _system,
 // ---- Finish --------------------------------------------------------
 void CbmMcbm2018EventBuilder::Finish() {
   if (fFillHistos) {
-    TFile* old     = gFile;
+    TFile* oldFile     = gFile;
+    TDirectory* oldDir = gDirectory;
+
     TFile* outfile = TFile::Open(fOutFileName, "RECREATE");
 
     fDiffTime->Write();
@@ -670,7 +673,8 @@ void CbmMcbm2018EventBuilder::Finish() {
     outfile->Close();
     delete outfile;
 
-    gFile = old;
+    gFile      = oldFile;
+    gDirectory = oldDir;
   }
   LOG(info) << "Total errors: " << fErrors;
 }
diff --git a/fles/mcbm2018/tasks/CbmMcbm2019CheckDigisMuch.cxx b/fles/mcbm2018/tasks/CbmMcbm2019CheckDigisMuch.cxx
index ef8d17e1c6..63f3bffae8 100644
--- a/fles/mcbm2018/tasks/CbmMcbm2019CheckDigisMuch.cxx
+++ b/fles/mcbm2018/tasks/CbmMcbm2019CheckDigisMuch.cxx
@@ -18,6 +18,7 @@
 #include "TH1.h"
 #include "TH2.h"
 #include "THttpServer.h"
+#include <TDirectory.h>
 #include <TFile.h>
 
 #include <iomanip>
@@ -199,7 +200,9 @@ void CbmMcbm2019CheckDigisMuch::Exec(Option_t* /*option*/) {
 void CbmMcbm2019CheckDigisMuch::Finish() { WriteHistos(); }
 
 void CbmMcbm2019CheckDigisMuch::WriteHistos() {
-  TFile* old     = gFile;
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
   TFile* outfile = TFile::Open(fOutFileName, "RECREATE");
 
   fDigisPerAsicEvo->Write();
@@ -209,7 +212,8 @@ void CbmMcbm2019CheckDigisMuch::WriteHistos() {
   outfile->Close();
   delete outfile;
 
-  gFile = old;
+  gFile      = oldFile;
+  gDirectory = oldDir;
 }
 
 ClassImp(CbmMcbm2019CheckDigisMuch)
diff --git a/fles/mcbm2018/tasks/CbmMcbm2019CheckDigisSts.cxx b/fles/mcbm2018/tasks/CbmMcbm2019CheckDigisSts.cxx
index f84c03802b..110db892f9 100644
--- a/fles/mcbm2018/tasks/CbmMcbm2019CheckDigisSts.cxx
+++ b/fles/mcbm2018/tasks/CbmMcbm2019CheckDigisSts.cxx
@@ -18,6 +18,7 @@
 #include "TH1.h"
 #include "TH2.h"
 #include "THttpServer.h"
+#include <TDirectory.h>
 #include <TFile.h>
 
 #include <iomanip>
@@ -186,7 +187,9 @@ void CbmMcbm2019CheckDigisSts::Exec(Option_t* /*option*/) {
 void CbmMcbm2019CheckDigisSts::Finish() { WriteHistos(); }
 
 void CbmMcbm2019CheckDigisSts::WriteHistos() {
-  TFile* old     = gFile;
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
   TFile* outfile = TFile::Open(fOutFileName, "RECREATE");
 
   fDigisPerAsicEvo->Write();
@@ -195,7 +198,8 @@ void CbmMcbm2019CheckDigisSts::WriteHistos() {
   outfile->Close();
   delete outfile;
 
-  gFile = old;
+  gFile      = oldFile;
+  gDirectory = oldDir;
 }
 
 ClassImp(CbmMcbm2019CheckDigisSts)
diff --git a/fles/mcbm2018/tasks/CbmMcbm2019CheckDtInDet.cxx b/fles/mcbm2018/tasks/CbmMcbm2019CheckDtInDet.cxx
index 96290840e2..88c58aad45 100644
--- a/fles/mcbm2018/tasks/CbmMcbm2019CheckDtInDet.cxx
+++ b/fles/mcbm2018/tasks/CbmMcbm2019CheckDtInDet.cxx
@@ -25,9 +25,9 @@
 #include "TH2.h"
 #include "THttpServer.h"
 #include "TProfile.h"
+#include <TDirectory.h>
 #include <TFile.h>
 
-
 #include <iomanip>
 #include <iostream>
 #include <type_traits>
@@ -510,7 +510,10 @@ void CbmMcbm2019CheckDtInDet::FillHistosPerDet(TH1* histoSameTime,
 void CbmMcbm2019CheckDtInDet::Finish() { WriteHistos(); }
 
 void CbmMcbm2019CheckDtInDet::WriteHistos() {
-  TFile* old     = gFile;
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
+
   TFile* outfile = TFile::Open(fOutFileName, "RECREATE");
 
   fT0T0SameTime->Write();
@@ -548,7 +551,8 @@ void CbmMcbm2019CheckDtInDet::WriteHistos() {
   outfile->Close();
   delete outfile;
 
-  gFile = old;
+  gFile      = oldFile;
+  gDirectory = oldDir;
 }
 
 ClassImp(CbmMcbm2019CheckDtInDet)
diff --git a/fles/mcbm2018/tasks/CbmMcbm2019CheckPulser.cxx b/fles/mcbm2018/tasks/CbmMcbm2019CheckPulser.cxx
index 642a7ed8ff..40fb17690d 100644
--- a/fles/mcbm2018/tasks/CbmMcbm2019CheckPulser.cxx
+++ b/fles/mcbm2018/tasks/CbmMcbm2019CheckPulser.cxx
@@ -25,9 +25,9 @@
 #include "TH2.h"
 #include "THttpServer.h"
 #include "TProfile.h"
+#include <TDirectory.h>
 #include <TFile.h>
 
-
 #include <iomanip>
 #include <iostream>
 #include <type_traits>
@@ -1113,7 +1113,9 @@ Int_t CbmMcbm2019CheckPulser::FillSystemOffsetHistos(TH1* histo,
 void CbmMcbm2019CheckPulser::Finish() { WriteHistos(); }
 
 void CbmMcbm2019CheckPulser::WriteHistos() {
-  TFile* old     = gFile;
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
   TFile* outfile = TFile::Open(fOutFileName, "RECREATE");
 
   fT0StsDiff->Write();
@@ -1189,7 +1191,8 @@ void CbmMcbm2019CheckPulser::WriteHistos() {
   outfile->Close();
   delete outfile;
 
-  gFile = old;
+  gFile      = oldFile;
+  gDirectory = oldDir;
 }
 
 ClassImp(CbmMcbm2019CheckPulser)
diff --git a/fles/mcbm2018/tasks/CbmMcbm2019CheckTimingPairs.cxx b/fles/mcbm2018/tasks/CbmMcbm2019CheckTimingPairs.cxx
index 6403fe7b31..c4da8780fc 100644
--- a/fles/mcbm2018/tasks/CbmMcbm2019CheckTimingPairs.cxx
+++ b/fles/mcbm2018/tasks/CbmMcbm2019CheckTimingPairs.cxx
@@ -19,9 +19,9 @@
 #include "TH2.h"
 #include "THttpServer.h"
 #include "TProfile.h"
+#include <TDirectory.h>
 #include <TFile.h>
 
-
 #include <iomanip>
 #include <iostream>
 #include <type_traits>
@@ -626,7 +626,9 @@ void CbmMcbm2019CheckTimingPairs::FillHistos(UInt_t uIndexT0,
 void CbmMcbm2019CheckTimingPairs::Finish() { WriteHistos(); }
 
 void CbmMcbm2019CheckTimingPairs::WriteHistos() {
-  TFile* old     = gFile;
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
   TFile* outfile = TFile::Open(fOutFileName, "RECREATE");
 
   for (UInt_t uPair = 0; uPair < fhDtADtB.size(); ++uPair) {
@@ -636,7 +638,8 @@ void CbmMcbm2019CheckTimingPairs::WriteHistos() {
   outfile->Close();
   delete outfile;
 
-  gFile = old;
+  gFile      = oldFile;
+  gDirectory = oldDir;
 }
 
 ClassImp(CbmMcbm2019CheckTimingPairs)
diff --git a/fles/mcbm2018/tasks/CbmMcbm2019TimeWinEventBuilderTask.cxx b/fles/mcbm2018/tasks/CbmMcbm2019TimeWinEventBuilderTask.cxx
index 1216bf30e5..683a1f8e67 100644
--- a/fles/mcbm2018/tasks/CbmMcbm2019TimeWinEventBuilderTask.cxx
+++ b/fles/mcbm2018/tasks/CbmMcbm2019TimeWinEventBuilderTask.cxx
@@ -17,6 +17,7 @@
 #include "TH1.h"
 #include "TH2.h"
 #include "THttpServer.h"
+#include <TDirectory.h>
 #include <TFile.h>
 
 // ---- Default constructor -------------------------------------------
@@ -127,11 +128,11 @@ void CbmMcbm2019TimeWinEventBuilderTask::SaveHistos() {
     histoFile->cd();
   }  // for( UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto )
 
+  histoFile->Close();
+
   /// Restore old global file and folder pointer to avoid messing with FairRoot
   gFile      = oldFile;
   gDirectory = oldDir;
-
-  histoFile->Close();
 }
 //----------------------------------------------------------------------
 void CbmMcbm2019TimeWinEventBuilderTask::SetFillHistos(Bool_t bFlag) {
diff --git a/fles/mcbm2018/tasks/CbmMcbmCheckTimingAlgo.cxx b/fles/mcbm2018/tasks/CbmMcbmCheckTimingAlgo.cxx
index 5d325e5d37..af8c47e657 100644
--- a/fles/mcbm2018/tasks/CbmMcbmCheckTimingAlgo.cxx
+++ b/fles/mcbm2018/tasks/CbmMcbmCheckTimingAlgo.cxx
@@ -23,6 +23,7 @@
 #include "TH1.h"
 #include "TH2.h"
 #include "THttpServer.h"
+#include <TDirectory.h>
 #include <TFile.h>
 
 #include <iomanip>
@@ -415,7 +416,9 @@ void CbmMcbmCheckTimingAlgo::Finish() {
 }
 
 void CbmMcbmCheckTimingAlgo::WriteHistos() {
-  TFile* old     = gFile;
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
   TFile* outfile = TFile::Open(fOutFileName, "RECREATE");
 
   for (UInt_t uDetIdx = 0; uDetIdx < fvDets.size(); ++uDetIdx) {
@@ -435,7 +438,8 @@ void CbmMcbmCheckTimingAlgo::WriteHistos() {
   outfile->Close();
   delete outfile;
 
-  gFile = old;
+  gFile      = oldFile;
+  gDirectory = oldDir;
 }
 
 // ---- Finish --------------------------------------------------------
diff --git a/fles/mcbm2018/tasks/CbmMcbmCheckTimingTask.cxx b/fles/mcbm2018/tasks/CbmMcbmCheckTimingTask.cxx
index 7fa222bf48..5fd266077b 100644
--- a/fles/mcbm2018/tasks/CbmMcbmCheckTimingTask.cxx
+++ b/fles/mcbm2018/tasks/CbmMcbmCheckTimingTask.cxx
@@ -16,6 +16,7 @@
 #include "TH1.h"
 #include "TH2.h"
 #include "THttpServer.h"
+#include <TDirectory.h>
 #include <TFile.h>
 
 /// C/C++ headers
@@ -71,13 +72,13 @@ void CbmMcbmCheckTimingTask::SaveHistos() {
    /// Obtain vector of pointers on each histo from the algo (+ optionally desired folder)
    std::vector< std::pair< TNamed *, std::string > > vHistos = fpAlgo->GetHistoVector();
 
-   /// (Re-)Create ROOT file to store the histos
-   TFile* histoFile   = nullptr;
-
    /// Save old global file and folder pointer to avoid messing with FairRoot
    TFile* oldFile     = gFile;
    TDirectory* oldDir = gDirectory;
 
+   /// (Re-)Create ROOT file to store the histos
+   TFile* histoFile   = nullptr;
+
    /// open separate histo file in recreate mode
    histoFile = new TFile( fsOutFileName , "RECREATE");
    histoFile->cd();
@@ -98,8 +99,8 @@ void CbmMcbmCheckTimingTask::SaveHistos() {
    } // for( UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto )
 
   /// Restore original directory position
-  oldDir->cd();
-  histoFile->Close();
+  gFile      = oldFile;
+  gDirectory = oldDir;
 */
 }
 //----------------------------------------------------------------------
diff --git a/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerTaskTrdR.cxx b/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerTaskTrdR.cxx
index 7198fe4290..70638ccdf8 100644
--- a/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerTaskTrdR.cxx
+++ b/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerTaskTrdR.cxx
@@ -117,13 +117,13 @@ void CbmMcbm2018UnpackerTaskTrdR::Finish() {
     std::vector<std::pair<TNamed*, std::string>> vHistos =
       fUnpackerAlgo->GetHistoVector();
 
-    /// (Re-)Create ROOT file to store the histos
-    TFile* histoFile   = nullptr;
-
     /// Save old global file and folder pointer to avoid messing with FairRoot
     TFile* oldFile     = gFile;
     TDirectory* oldDir = gDirectory;
 
+    /// (Re-)Create ROOT file to store the histos
+    TFile* histoFile = nullptr;
+
     // open separate histo file in recreate mode
     TString histoFileName = fMonitorHistoFileName;
     histoFile             = new TFile(histoFileName.Data(), "RECREATE");
@@ -138,6 +138,7 @@ void CbmMcbm2018UnpackerTaskTrdR::Finish() {
       vHistos[uHisto].first->Write();
       histoFile->cd();
     }
+
     /// Restore old global file and folder pointer to avoid messing with FairRoot
     gFile      = oldFile;
     gDirectory = oldDir;
-- 
GitLab