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