From 0539d73e1f4101b849cfe51025defcfcbfd5b70d Mon Sep 17 00:00:00 2001 From: Philippe Canal <pcanal@fnal.gov> Date: Thu, 20 Mar 2008 22:04:03 +0000 Subject: [PATCH] Remove unnecessary change of the current ROOT directory and reduce the span of those that are still compulsory (hence aiding threadsafety) git-svn-id: http://root.cern.ch/svn/root/trunk@22805 27541ba8-7e3a-0410-8455-c3a389f83636 --- tree/src/TBasket.cxx | 2 -- tree/src/TBranch.cxx | 8 +++++--- tree/src/TBranchElement.cxx | 3 +-- tree/src/TBranchObject.cxx | 3 +-- tree/src/TChain.cxx | 21 ++++++++++++++------- tree/src/TFriendElement.cxx | 2 +- tree/src/TTree.cxx | 12 +++++------- 7 files changed, 27 insertions(+), 24 deletions(-) diff --git a/tree/src/TBasket.cxx b/tree/src/TBasket.cxx index b26c9166d27..e7bad9ea9a0 100644 --- a/tree/src/TBasket.cxx +++ b/tree/src/TBasket.cxx @@ -265,8 +265,6 @@ Int_t TBasket::ReadBasketBuffers(Long64_t pos, Int_t len, TFile *file) // The function returns 0 in case of success, 1 in case of error Int_t badread= 0; - TDirectory::TContext ctxt(0); - fBranch->GetDirectory()->cd(); if (fBranch->GetTree()->MemoryFull(fBufferSize)) fBranch->DropBaskets(); diff --git a/tree/src/TBranch.cxx b/tree/src/TBranch.cxx index 128077e253c..55dd4690387 100644 --- a/tree/src/TBranch.cxx +++ b/tree/src/TBranch.cxx @@ -929,7 +929,6 @@ TBasket* TBranch::GetBasket(Int_t basketnumber) if (basket) return basket; // create/decode basket parameters from buffer - TDirectory::TContext ctxt(0); TFile *file = GetFile(0); basket = new TBasket(file); if (fSkipZip) basket->SetBit(TBufferFile::kNotDecompressed); @@ -1188,8 +1187,11 @@ TFile* TBranch::GetFile(Int_t mode) delete [] bname; // Open file (new file if mode = 1) - if (mode) file = TFile::Open(bFileName, "recreate"); - else file = TFile::Open(bFileName); + { + TDirectory::TContext ctxt(0); + if (mode) file = TFile::Open(bFileName, "recreate"); + else file = TFile::Open(bFileName); + } if (!file) return 0; if (file->IsZombie()) {delete file; return 0;} fDirectory = (TDirectory*)file; diff --git a/tree/src/TBranchElement.cxx b/tree/src/TBranchElement.cxx index 08d1f5ffa21..c6423a04b4b 100644 --- a/tree/src/TBranchElement.cxx +++ b/tree/src/TBranchElement.cxx @@ -3684,8 +3684,7 @@ void TBranchElement::Streamer(TBuffer& R__b) motherFileName = mother->GetFileName(); } if ((fFileName.Length() > 0) && strcmp(motherFileName, fFileName.Data())) { - TDirectory::TContext ctxt(dirsav); - Write(); + dirsav->WriteTObject(this); } fDirectory = dirsav; } diff --git a/tree/src/TBranchObject.cxx b/tree/src/TBranchObject.cxx index 01650083da3..069786c70ae 100644 --- a/tree/src/TBranchObject.cxx +++ b/tree/src/TBranchObject.cxx @@ -553,8 +553,7 @@ void TBranchObject::Streamer(TBuffer& R__b) motherFileName = mother->GetFileName(); } if ((fFileName.Length() > 0) && strcmp(motherFileName, fFileName.Data())) { - TDirectory::TContext ctxt(dirsav); - Write(); + dirsav->WriteTObject(this); } fDirectory = dirsav; } diff --git a/tree/src/TChain.cxx b/tree/src/TChain.cxx index e80af52730a..56debae9190 100644 --- a/tree/src/TChain.cxx +++ b/tree/src/TChain.cxx @@ -383,7 +383,6 @@ Int_t TChain::AddFile(const char* name, Long64_t nentries /* = kBigNumber */, co // } - TDirectory::TContext ctxt(0); const char *treename = GetName(); if (tname && strlen(tname) > 0) treename = tname; char *dot = (char*)strstr(name,".root"); @@ -421,7 +420,11 @@ Int_t TChain::AddFile(const char* name, Long64_t nentries /* = kBigNumber */, co // Open the file to get the number of entries. Int_t pksize = 0; if (nentries <= 0) { - TFile* file = TFile::Open(filename); + TFile* file; + { + TDirectory::TContext ctxt(0); + file = TFile::Open(filename); + } if (!file || file->IsZombie()) { delete file; file = 0; @@ -1266,8 +1269,6 @@ Long64_t TChain::LoadTree(Long64_t entry) } } - TDirectory::TContext ctxt(0); - TChainElement* element = (TChainElement*) fFiles->At(treenum); if (!element) { if (treeReadEntry) { @@ -1282,7 +1283,10 @@ Long64_t TChain::LoadTree(Long64_t entry) // FIXME: We leak memory here, we've just lost the open file // if we did not delete it above. - fFile = TFile::Open(element->GetTitle()); + { + TDirectory::TContext ctxt(0); + fFile = TFile::Open(element->GetTitle()); + } // ----- Begin of modifications by MvL Int_t returnCode = 0; @@ -1490,7 +1494,10 @@ void TChain::Lookup(Bool_t force) TString eurl(elemurl.GetUrl()); if (!stg || !stg->Matches(eurl)) { SafeDelete(stg); - stg = TFileStager::Open(eurl); + { + TDirectory::TContext ctxt(0); + stg = TFileStager::Open(eurl); + } if (!stg) { Error("Lookup", "TFileStager instance cannot be instantiated"); break; @@ -1606,7 +1613,7 @@ Long64_t TChain::Merge(const char* name, Option_t* option) // ch.Merge(file); // - TFile* file = TFile::Open(name, "recreate", "chain files", 1); + TFile *file = TFile::Open(name, "recreate", "chain files", 1); return Merge(file, 0, option); } diff --git a/tree/src/TFriendElement.cxx b/tree/src/TFriendElement.cxx index d5256ec21f5..102425767c6 100644 --- a/tree/src/TFriendElement.cxx +++ b/tree/src/TFriendElement.cxx @@ -193,9 +193,9 @@ TFile *TFriendElement::GetFile() if (fFile || IsZombie()) return fFile; - TDirectory::TContext ctxt(gDirectory, 0); if (strlen(GetTitle())) { + TDirectory::TContext ctxt(gDirectory, 0); fFile = TFile::Open(GetTitle()); fOwnFile = kTRUE; } else { diff --git a/tree/src/TTree.cxx b/tree/src/TTree.cxx index f44795c9dc8..a8e593f386c 100644 --- a/tree/src/TTree.cxx +++ b/tree/src/TTree.cxx @@ -877,14 +877,13 @@ Long64_t TTree::AutoSave(Option_t* option) TString opt = option; opt.ToLower(); fSavedBytes = fTotBytes; - TDirectory *dirsav = gDirectory; - fDirectory->cd(); + TKey *key = (TKey*)fDirectory->GetListOfKeys()->FindObject(GetName()); Long64_t nbytes; if (opt.Contains("overwrite")) { - nbytes = Write("",TObject::kOverwrite); + nbytes = fDirectory->WriteTObject(this,"","",TObject::kOverwrite); } else { - nbytes = Write(); //nbytes will be 0 if Write failed (disk space exceeded) + nbytes = fDirectory->WriteTObject(this); //nbytes will be 0 if Write failed (disk space exceeded) if (nbytes && key) { key->Delete(); delete key; @@ -896,7 +895,6 @@ Long64_t TTree::AutoSave(Option_t* option) if (opt.Contains("saveself")) fDirectory->SaveSelf(); - dirsav->cd(); return nbytes; } @@ -6041,7 +6039,7 @@ void TTree::Streamer(TBuffer& b) fEstimate = 1000000; } fSavedBytes = fTotBytes; - gDirectory->Append(this); + fDirectory->Append(this); return; } //====process old versions before automatic schema evolution @@ -6064,7 +6062,7 @@ void TTree::Streamer(TBuffer& b) fLeaves.Streamer(b); fSavedBytes = fTotBytes; fDirectory = gDirectory; - gDirectory->Append(this); + fDirectory->Append(this); if (R__v > 1) fIndexValues.Streamer(b); if (R__v > 2) fIndex.Streamer(b); if (R__v > 3) { -- GitLab