Hi Brandon, As I already reported to you, I cannot reproduce your problem. Note that if you modify TKey as you suggest, YOU MUST GET AN ERROR. The line Int_t testValue = (Int_t)fSeekKey; is not correct. Testing testValue<0 will automatically happen when your file reaches 2 GBytes. Rene Brun > Brandon Kohn wrote: > > Hello Rene, > > > Here is a test program/makefile bit for linux that will reproduce the problem > I'm seeing. Have you had a chance to run any more tests? > > Thanks much! > > Brandon > > ---Below is a message that bounced back when I tried to post on roottalk. > > Hello rooters, > > I've been experiencing some sporadic trouble with key writing on files over > 2 gigabytes, and I would like to get some confirmation from an external > party that the bug I'm seeing is indeed happening on other machines. > > In order to see the bug, you must make a small change to TKey.cxx (a simple > conditional test with a message output to a file and stdout.) > > here is the diff for my TKey.cxx from the current cvs HEAD: > > RCS file: /user/cvs/root/base/src/TKey.cxx,v > > retrieving revision 1.44 > > diff -r1.44 TKey.cxx > > 937a938,950 > > > ///This will allow you to check when the error occurs with a debug break > or file output. > > > ///HACK: try to correct incorrectly identified seekKeys. > > > Int_t testValue = (Int_t)fSeekKey; > > > if(testValue < 0 && fVersion <= 1000) > > > { > > > std::cout << "It happened!" << std::endl; > > > std::ofstream ofs("c:/errorfileroot.txt",std::ios::app); > > > ofs << "File pointer using int when long64." << std::endl; > > > ofs << "File end value: " << gFile->GetEND() << std::endl; > > > ofs << "File name: " << gFile->GetName() << std::endl; > > > ofs << "On object: " << this->GetName() << std::endl; > > > ofs.close(); > > > } > > Or simply replace the TKey::Streamer method with the following... > > //_______________________________________________________________________ > void TKey::Streamer(TBuffer &b) > { > //*-*-*-*-*-*-*-*-*Stream a class object*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* > //*-* ========================================= > Version_t version; > if (b.IsReading()) { > b >> fNbytes; > b >> version; fVersion = (Int_t)version; > b >> fObjlen; > fDatime.Streamer(b); > b >> fKeylen; > b >> fCycle; > if (fVersion > 1000) { > b >> fSeekKey; > b >> fSeekPdir; > } else { > Int_t seekkey, seekdir; > b >> seekkey; fSeekKey = (Long64_t)seekkey; > b >> seekdir; fSeekPdir= (Long64_t)seekdir; > } > fClassName.Streamer(b); > fName.Streamer(b); > fTitle.Streamer(b); > } else { > b << fNbytes; > ///This will allow you to check when the error occurs with a debug break or > file output. > ///HACK: try to correct incorrectly identified seekKeys. > Int_t testValue = (Int_t)fSeekKey; > if(testValue < 0 && fVersion <= 1000) > { > std::ofstream ofs("c:/errorfileroot.txt",std::ios::app); > ofs << "File pointer using int when long64." << std::endl; > ofs << "File end value: " << gFile->GetEND() << std::endl; > ofs << "File name: " << gFile->GetName() << std::endl; > ofs << "On object: " << this->GetName() << std::endl; > ofs.close(); > fVersion += 1000; > } > version = (Version_t)fVersion; > b << version; > b << fObjlen; > if (fDatime.Get() == 0) fDatime.Set(); > fDatime.Streamer(b); > b << fKeylen; > b << fCycle; > if (fVersion > 1000) { > b << fSeekKey; > b << fSeekPdir; > } else { > b << (Int_t)fSeekKey; > b << (Int_t)fSeekPdir; > } > fClassName.Streamer(b); > fName.Streamer(b); > fTitle.Streamer(b); > } > } > > After making this change, recompile root.. and then compile and run the test > that I've included. The test simply creates a TFile and begins filling it > with both large and small instances of a CBinaryLargeObject class (which is > included). It it essential that you run the case exactly as I have included > it as I've found that the problem only occurs with a mixture of size types > for the Binary Large Objects. > > I've included a tar.gz'd version of the example that hopefully illustrates > the bug... > > Please let me know if you are able to replicate this. > > --Kindest Regards > > ____________________________________________________________ > Brandon Kohn Tel.: +377 97 97 41 51 > Software Developer > The Maia Institute Fax.: +377 97 97 41 59 > Le Patio Palace > ____________________________________________ > > Important Notice > > This email and any attachments to it are confidential and intended solely > for the individual(s) to whom they are addressed. Any modification or > dissemination of the contents of this e-mail is strictly prohibited unless > expressly authorised by the sender. If you receive this e-mail by mistake, > please advise the sender immediately by using the reply facility in your > e-mail software. Please also delete the message from your computer, and > destroy any paper copies. Thank you for your co-operation. > > Name: testbigfile.tar.gz > testbigfile.tar.gz Type: Unix Tape Archive (application/x-tar) > Encoding: base64
This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:09 MET