From a27a26776fa38ecb5ab976ddd661e10c88e10e51 Mon Sep 17 00:00:00 2001 From: Axel Naumann <Axel.Naumann@cern.ch> Date: Mon, 21 Nov 2016 09:31:12 +0100 Subject: [PATCH] Use the tree number, not the pointer; return early if end-of-chain; simplify condition for setting proxies. --- tree/treeplayer/src/TTreeReader.cxx | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/tree/treeplayer/src/TTreeReader.cxx b/tree/treeplayer/src/TTreeReader.cxx index 56abee7ecc4..3bbb743083f 100644 --- a/tree/treeplayer/src/TTreeReader.cxx +++ b/tree/treeplayer/src/TTreeReader.cxx @@ -313,9 +313,16 @@ TTreeReader::EEntryStatus TTreeReader::SetEntryBase(Long64_t entry, Bool_t local return fEntryStatus; } - Int_t treeNumberBeforeLoadTree = fTree->GetTreeNumber(); + if (fProxiesSet && fDirector && fDirector->GetReadEntry() == -1) { + // Passed the end of the chain, Restart() was not called: + // don't try to load entries anymore. Can happen in these cases: + // while (tr.Next()) {something()}; + // while (tr.Next()) {somethingelse()}; // should not be calling somethingelse(). + fEntryStatus = kEntryNotFound; + return fEntryStatus; + } - TTree* prevTree = fDirector->GetTree(); + Int_t treeNumberBeforeLoadTree = fTree->GetTreeNumber(); TTree* treeToCallLoadOn = local ? fTree->GetTree() : fTree; Long64_t loadResult = treeToCallLoadOn->LoadTree(entry); @@ -343,12 +350,12 @@ TTreeReader::EEntryStatus TTreeReader::SetEntryBase(Long64_t entry, Bool_t local } } - if (fMostRecentTreeNumber != fTree->GetTreeNumber()) { + if (fDirector->GetTree() != fTree->GetTree()) fDirector->SetTree(fTree->GetTree()); - fMostRecentTreeNumber = fTree->GetTreeNumber(); - } - if (!prevTree || fDirector->GetReadEntry() == -1 || !fProxiesSet) { + fMostRecentTreeNumber = fTree->GetTreeNumber(); + + if (!fProxiesSet) { // Tell readers we now have a tree for (std::deque<ROOT::Internal::TTreeReaderValueBase*>::const_iterator i = fValues.begin(); i != fValues.end(); ++i) { // Iterator end changes when parameterized arrays are read -- GitLab