Joseph Tuggle <jtuggle@fnal.gov> writes:
> Hello,
>
> I'm writing a program that uses the TFile class to write out some
> histograms and other ROOT objects. My program goes something like this:
>
> TFile outputFile("output.root", "recreate");
> // All my code
> outputFile.Write();
> outputFile.Close();
>
> However, I get a segmentation fault when I try to close the file. I
> traced the fault to the statement surrounded by asterisks below in
> TFile.cxx (I included the rest for context):
>
> // Delete free segments from free list (but don't delete list header)
> if (fFree) {
> fFree->Delete();
> }
>
> if (IsOpen()) {
> SysClose(fD);
> fD = -1;
> }
>
> fWritable = kFALSE;
>
> if (cursav)
> cursav->cd();
> else {
> gFile = 0;
> *** gDirectory = gROOT; ***
> }
>
> When it reaches this statement, it tells me the problem is with this
> line from Class TIter in TCollection.h:
>
> TIter(const TCollection *col, Bool_t dir = kIterForward)
> : fIterator(col ? col->MakeIterator(dir) : 0) { }
>
> Any ideas?
>
> Thanks!
> Joe
>
Hi Joe,
do you run anything like
root [0] TFile outputFile("output.root", "recreate");
root [1] TH1F b("h1","",10,0.,1.)
root [2] outputFile.Write()
root [3] outputFile.Close()
root [4] .q
?
I'm getting a segfault after .q too.
It seems that the histogram is destructed twice once when the file is
closed and second when global objects are cleaned up.
I have the current CVS sources, Debian/Linux/ppc. It is reproduucible
on lxplus too.
cheers
--
Jiri
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:51:02 MET