Pasha, ROOT/CINT behaves as it is supposed to. The command '.L file' executes a sequence of 1) G__unloadfile("file"); 2) G__loadfile("file"); This is convenient when you modify the "file" and try it many times. >Error: G__unloadfile() Can not unload "cant_unload.C", file busy This error happens in stage 1). G__unloadfile() tries to unload all files that is loaded after "filename". Source file loading stack looks as follows after you run test1.C root[0] .x test1.C root[1] .file 0 fp= xxxxxx lines=5 file="test1.C" 1 fp= xxxxxx lines=4 file="cant_unload.C" Then you run test2.C. At the moment of test2.C start-up, source file loading stack looks like test1.C cant_unload.C test2.C Then ".L cant_unload.C" is executed. This command tries to unload cant_unload.C and test2.C. Because test2() is running, this causes error. Masaharu Goto --------------------------------------------------------------------------- Dear ROOT developers, I guess I'm hitting a problem with unloading an interpreted script and here is how it reveals itself (I boiled the real problem down to this example): - I have 2 scripts - test1.C and test2.C, both trying to load the same 3rd script by calling TInterpreter::ProcessLine method: --------------------------------------------------test1.C int test1() { gROOT->Reset(); gInterpreter->ProcessLine(".L cant_unload.C"); } -------------------------------------------------- test2.C int test2() { gROOT->Reset(); gInterpreter->ProcessLine(".L cant_unload.C"); } -------------------------------------------------- cant_unload.C int cant_unload() { cout << "cant unload" << endl; } --------------------------------------------------- - and here is the diagnostics (root 2.00/08 compiled on IRIX62/GCC): ------------------------------------------------------------------------------ --root [0] .x test1.C (int)0 root [1] .x test2.C Function test2() busy. loaded after "cant_unload.C" Error: G__unloadfile() Can not unload "cant_unload.C", file busy FILE:/data61/top/murat/lgammamet/test2.C LINE:3 (Int_t)0 *** Interpreter error recovered *** In case I'm using G__loadfile() instead of calling TInterpreter::ProcessLine things seem to be all right. Regards, Pasha.
This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:34:34 MET