diff --git a/tree/tree/inc/TBranchCacheInfo.h b/tree/tree/inc/TBranchCacheInfo.h index 3336978a6d6d3..431fdb5b605a5 100644 --- a/tree/tree/inc/TBranchCacheInfo.h +++ b/tree/tree/inc/TBranchCacheInfo.h @@ -138,20 +138,26 @@ class TBranchCacheInfo { } /// Print the info we have for the baskets. - void Print(const char *owner, Long64_t *entries) const + void Print(const char *owner, Long64_t *entries, Int_t nBaskets, Long64_t nEntries) const { if (!owner || !entries) return; auto len = fInfo.GetNbits() / kSize + 1; - if (fBasketPedestal >= 0) + if ( (fBasketPedestal + len) > (UInt_t)nBaskets) + len = nBaskets - fBasketPedestal; + if (fBasketPedestal >= 0 && len) { for (UInt_t b = 0; b < len; ++b) { Printf("Branch %s : basket %d loaded=%d used=%d start entry=%lld", owner, b + fBasketPedestal, (bool)fInfo[kSize * b + kLoaded], (bool)fInfo[kSize * b + kUsed], entries[fBasketPedestal + b]); } + Printf("Branch %s : entry range: [ %lld, %lld [", owner, + entries[fBasketPedestal], + (fBasketPedestal + len) >= (UInt_t)nBaskets ? nEntries : entries[fBasketPedestal + len]); + } } }; } // Internal } // ROOT -#endif // ROOT_TBranchCacheInfo \ No newline at end of file +#endif // ROOT_TBranchCacheInfo diff --git a/tree/tree/src/TBranch.cxx b/tree/tree/src/TBranch.cxx index 118f3a3d0be0f..b093e20a2f185 100644 --- a/tree/tree/src/TBranch.cxx +++ b/tree/tree/src/TBranch.cxx @@ -2363,7 +2363,7 @@ void TBranch::Print(Option_t *option) const void TBranch::PrintCacheInfo() const { - fCacheInfo.Print(GetName(), fBasketEntry); + fCacheInfo.Print(GetName(), fBasketEntry, fMaxBaskets, fEntries); } //////////////////////////////////////////////////////////////////////////////// diff --git a/tree/tree/src/TTreeCache.cxx b/tree/tree/src/TTreeCache.cxx index acb44dd57a2af..71c2470d95c3b 100644 --- a/tree/tree/src/TTreeCache.cxx +++ b/tree/tree/src/TTreeCache.cxx @@ -1266,6 +1266,8 @@ Bool_t TTreeCache::FillBuffer() if (showMore || gDebug > 6) Info("FillBuffer", "Looking at cluster spanning from %lld to %lld", fEntryCurrent, fEntryNext); + if (0 <= fNextClusterStart && fEntryCurrent < fNextClusterStart && !(fEntryCurrent < fNextClusterStart)) + fEntryCurrent = fNextClusterStart; if (fEntryCurrent < fEntryMin) fEntryCurrent = fEntryMin; if (fEntryMax <= 0) fEntryMax = tree->GetEntries(); if (fEntryNext > fEntryMax) fEntryNext = fEntryMax;