diff --git a/tree/tree/src/TBranch.cxx b/tree/tree/src/TBranch.cxx index 2722d8c6a88f02b8a415ae0cdb010a15425067bc..700fe0d5a06b74bd1e431e78afc63572778018f6 100644 --- a/tree/tree/src/TBranch.cxx +++ b/tree/tree/src/TBranch.cxx @@ -528,7 +528,7 @@ TBuffer* TBranch::GetTransientBuffer(Int_t size) /// the insert (since we'll need to move all the record that are /// entere 'too early'). /// Warning we also assume that the __current__ write basket is -/// not present (aka has been removed). +/// not present (aka has been removed) or is empty (no entries). void TBranch::AddBasket(TBasket& b, Bool_t ondisk, Long64_t startEntry) { @@ -572,13 +572,20 @@ void TBranch::AddBasket(TBasket& b, Bool_t ondisk, Long64_t startEntry) } fBasketEntry[where] = startEntry; + TBasket *existing = (TBasket*)fBaskets.At(fWriteBasket); + if (existing && existing->GetNevBuf()) { + Fatal("AddBasket", "Dropping non-empty 'write' basket in %s %s", + GetTree()->GetName(), GetName()); + } + delete existing; if (ondisk) { fBasketBytes[where] = basket->GetNbytes(); // not for in mem fBasketSeek[where] = basket->GetSeekKey(); // not for in mem - fBaskets.AddAtAndExpand(0,fWriteBasket); + fBaskets.AddAtAndExpand(0, fWriteBasket); ++fWriteBasket; } else { ++fNBaskets; + // The basket we are adding becomes the new 'write' basket. fBaskets.AddAtAndExpand(basket,fWriteBasket); fTree->IncrementTotalBuffers(basket->GetBufferSize()); }