Hi Yuriy,
Thanks for reporting this special case when opening a non existing file.
I have protected the constructor and destructor. In CVS
Rene Brun
"Y. Shitov" wrote:
>
> Dear ROOTers,
>
> I think that I found the bug in THbookFile class. The point is that
> ctor works incorrectly opening non existing HBOOK file.
>
> The following script demonstrates the problem:
>
> void rz() {
> if (!TClassTable::GetDict("THbookFile"))
> gSystem->Load("libHbook");
> THbookFile *f;
>
> Int_t i=0;
> while (++i) {
> f = new THbookFile("blablabla");
> cout << i << "-th step: Current directory is '"
> << f->GetCurDir() << "'. ";
> if (i<10)
> cout << "OK." << endl;
> else {
> cout << "fgLuns stack is full. "
> "Can't open any THbookFile objects more..." << endl;
> getchar();
> }
> // delete f;
> }
> }
>
> There are two points here:
> 1. One need to reset non-used item in the container of free logical units
> fgLuns
> (http://root.cern.ch/root/htmldoc/THbookFile.html#THbookFile:fgLuns)
> in ctor (see code below).
>
> 2. Call of dtor in code above (commented line) leads to crash, because
> fList,fKeys
> http://root.cern.ch/root/htmldoc/THbookFile.html#THbookFile:fList
> http://root.cern.ch/root/htmldoc/THbookFile.html#THbookFile:fKeys
> lists deleted there are not initialized in this particular case.
>
> Best wishes,
> Yuriy.
>
> Correction proposed for THbookFile::THbookFile(const char *fname, Int_t lrecl)
>
> > if (ier) printf (" Error on hropen was %d \n", ier);
> > if (quest[0]) {
> > printf("Error cannot open input file: %s\n",fname);
> > }
> > if (ier || quest[0]) {
> fgLuns[fLun-10]=0;
> > fLun = 0;
> > MakeZombie();
> > return;
> > }
This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:05 MET