Re: [ROOT] 3.05.03 feature change?

From: Rene Brun (Rene.Brun@cern.ch)
Date: Thu Apr 03 2003 - 16:39:31 MEST


Hi Clark,

I have checked that your proposed fix is OK and indeed fixes the recurvity
problem with your small example.
Thanks for this contribution.

Rene Brun

Clark McGrew wrote:
> 
> Hello,
> 
> I've isolated a corner case where the correction to
> TStreamerInfo::ForceWriteInfo() made in TStreamerInfo.cxx: version 1.161
> causes an infinite recursion.
> 
>         class aProblemChild: public TNamed {
>            aProblemChild *canBeNull;
>         };
> 
> When ForceWriteInfo() is called for this with force=kTRUE, the
> 
>         if (cindex->fArray[fNumber] && !force) return;
> 
> logic will cause it to try and write an infinite number of aProblemChild
> info records.
> 
> I'm not sure of the appropriate correction.  I think the problem is that
> all "unforced" elements should be forced onto the output, but only
> once.  A solution that might work is to apply this patch
> 
> >>>>>>>>>>>>>>>>>>>
> diff -u -r1.163 TStreamerInfo.cxx
> --- TStreamerInfo.cxx   2003/03/11 01:18:47     1.163
> +++ TStreamerInfo.cxx   2003/03/31 18:07:43
> @@ -809,8 +809,9 @@
>     // flag this class
>     if (!file) return;
>     TArrayC *cindex = file->GetClassIndex();
> -   if (cindex->fArray[fNumber] && !force) return;
> -   cindex->fArray[fNumber] = 1;
> +   if ((cindex->fArray[fNumber] && !force)
> +       || cindex->fArray[fNumber]>1) return;
> +   cindex->fArray[fNumber] = 2;
>     cindex->fArray[0] = 1;
> <<<<<<<<<<<<<<<<<<<<<<
> 
> This appears to work, but there may be effects that I'm not aware of.
> 
> Thanks,
> Clark
> 
> On Sun, 2003-03-30 at 22:05, Clark McGrew wrote:
> > Hello Again,
> >
> > I did some digging to isolate the problem I reported below.  The crash
> > I'm seeing is caused in the custom streamer introduced in
> > TBranchElement.cxx between version 1.104 and 1.105.  I will try to
> > generate some example code to tickle the bug, but the symptom is that
> > TBranchElement::Streamer() calls TStreamerInfo::ForceWriteInfo() by way
> > of fInfo.  TStreamerInfo::ForceWriteInfo() recurses infinitely until the
> > stack is full.  I haven't figured out why ForceWriteInfo is stuck in
> > infinite recursion.
> >
> > I see the symptom with 3.05.03, and it first appears with in cvs
> > versions for 6 March 2003.  I'm working on debian linux with g++-3.2.
> > I'm sorry this is a little vague at the moment, and will try to get some
> > example code soon.
> >
> > Thanks,
> > Clark
> >
> > On Sun, 2003-03-30 at 14:31, Clark McGrew wrote:
> > > Hi Rene,
> > >
> > > Thanks so much for replying on a Sunday.  At first I thought it was a
> > > compile or LD_LIBRARY_PATH problem, and have check three ways backward
> > > and forward.  I keep several versions of root on my machine, so it is
> > > possible that I've goofed.  I'll delete all the objects one more time
> > > and triple check all the paths.
> > >
> > > Personally, I suspect that it's a deep, nasty bug in my code that is
> > > just now being tickled.  I just wanted to make sure the interface hadn't
> > > changed before I starting a major I/O debugging session.
> > >
> > > Thanks,
> > > Clark
> > >
> > > On Sun, 2003-03-30 at 11:17, Rene Brun wrote:
> > > > Hi Clark,
> > > >
> > > > This type of trouble may appear when you have a mismatch
> > > > in your LD_LIBRARY_PATH or you did not recompile some of your classes.
> > > > Root version 3.05/03 is back compatible with previous versions.
> > > >
> > > > Rene Brun
> > > >
> > > > On
> > > > 30 Mar 2003,
> > > > Clark McGrew wrote:
> > > >
> > > > > Hello,
> > > > >
> > > > > I'm running into a problem reading and writing files using TFile that
> > > > > appeared when I upgraded from 3.05.02 and 3.05.03.  This isn't a "bug
> > > > > report", but I am checking to see if anybody else has seen a problem, or
> > > > > if there is a known interface change that I've missed before I start a
> > > > > major "what changed" debug.
> > > > >
> > > > > The problem occurs when I am about to close a TFile with the approximate
> > > > > idiom:
> > > > >
> > > > >         aTFile.Write();
> > > > >         aTFile.Close();
> > > > >
> > > > > This works in 3.05.02, and core dumps in 3.05.03.  Also, I can't read
> > > > > files written with 3.05.02 using 3.05.03 (files look fine with '02).
> > > > > If there haven't been any expected changes in the tfile semantics, I'll
> > > > > chase down a short code snippet to isolate the problem.
> > > > >
> > > > > Thanks in advance.
> > > > >
> > > > > Clark
> > > > >
> --
> Clark McGrew <clark.mcgrew@sunysb.edu>
> University at Stony Brook, Dept. of Physics and Astronomy



This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:10 MET