Hello,
I have created a python script which just imports the ROOT.py module like this:
[atpilot002@td425 tmp]$ cat myscript.py
#!/usr/bin/python
from ROOT import *
Then I run my script passing a file as an argument. Nothing should happen because the python script just includes the ROOT module, but:
I define the variable file first:
[atpilot002@td425 tmp]$ file=“dcap://dcap.pic.es:22125/pnfs/pic.es/data/atlas/atlasmcdisk/mc09_7TeV/ESD/e530_s765_s767_r1302/mc09_7TeV.113161.AlpgenJimmyBBjetsNp0_J3.recon.ESD.e530_s765_s767_r1302_tid137248_00/ESD.137248._000001.pool.root.6”
Run the script
[atpilot002@td425 tmp]$ python myscript.py $file
Warning in TEnvRec::ChangeValue: duplicate entry <Library.vector=vector.dll> for level 0; ignored
Warning in TEnvRec::ChangeValue: duplicate entry <Library.vector=vector.dll> for level 0; ignored
Warning in TEnvRec::ChangeValue: duplicate entry <Library.vector=vector.dll> for level 0; ignored
Warning in TEnvRec::ChangeValue: duplicate entry <Library.vector=vector.dll> for level 0; ignored
Warning in TEnvRec::ChangeValue: duplicate entry <Library.vector=vector.dll> for level 0; ignored
Warning in TEnvRec::ChangeValue: duplicate entry <Library.vector=vector.dll> for level 0; ignored
Warning in TEnvRec::ChangeValue: duplicate entry <Library.vector=vector.dll> for level 0; ignored
Warning in TEnvRec::ChangeValue: duplicate entry <Library.vector=vector.dll> for level 0; ignored
Warning in TEnvRec::ChangeValue: duplicate entry <Library.vector=vector.dll> for level 0; ignored
Warning in TEnvRec::ChangeValue: duplicate entry <Library.vector=vector.dll> for level 0; ignored
All those warnings are code from the ROOT.py module.
Now, if I run the same script but with the arguments “$file,$file,$file,$file,$file” it hangs.
[atpilot002@td425 tmp]$ python myscript.py $file,$file,$file,$file,$file
*** glibc detected *** python: free(): invalid next size (normal): 0x0a04bf40 ***
Instead if I do it with just 4 files it doesn’t hang, but the ROOT module does plenty of things, remember the myscript just includes the ROOT module, nothing more:
[atpilot002@td425 tmp]$ python myscript.py $file,$file,$file,$file
Command failed!
Server error message for [1]: “path /pnfs/fs/usr/data/atlas/atlasmcdisk/mc09_7TeV/ESD/e530_s765_s767_r1302/mc09_7TeV.113161.AlpgenJimmyBBjetsNp0_J3.recon.ESD.e530_s765_s767_r1302_tid137248_00/ESD.137248._000001.pool.root.6,dcap:/dcap.pic.es:22125/pnfs/pic.es/data/atlas/atlasmcdisk/mc09_7TeV/ESD/e530_s765_s767_r1302/mc09_7TeV.113161.AlpgenJimmyBBjetsNp0_J3.recon.ESD.e530_s765_s767_r1302_tid137248_00/ESD.137248._000001.pool.root.6,dcap:/dcap.pic.es:22125/pnfs/pic.es/data/atlas/atlasmcdisk/mc09_7TeV/ESD/e530_s765_s767_r1302/mc09_7TeV.113161.AlpgenJimmyBBjetsNp0_J3.recon.ESD.e530_s765_s767_r1302_tid137248_00/ESD.137248._000001.pool.root.6,dcap:/dcap.pic.es:22125/pnfs/pic.es/data/atlas/atlasmcdisk/mc09_7TeV/ESD/e530_s765_s767_r1302/mc09_7TeV.113161.AlpgenJimmyBBjetsNp0_J3.recon.ESD.e530_s765_s767_r1302_tid137248_00/ESD.137248._000001.pool.root.6 not found” (errno 10001).
Warning in TEnvRec::ChangeValue: duplicate entry <Library.vector=vector.dll> for level 0; ignored
Warning in TEnvRec::ChangeValue: duplicate entry <Library.vector=vector.dll> for level 0; ignored
Warning in TEnvRec::ChangeValue: duplicate entry <Library.vector=vector.dll> for level 0; ignored
Warning in TEnvRec::ChangeValue: duplicate entry <Library.vector=vector.dll> for level 0; ignored
Warning in TEnvRec::ChangeValue: duplicate entry <Library.vector=vector.dll> for level 0; ignored
Warning in TEnvRec::ChangeValue: duplicate entry <Library.vector=vector.dll> for level 0; ignored
Warning in TEnvRec::ChangeValue: duplicate entry <Library.vector=vector.dll> for level 0; ignored
Warning in TEnvRec::ChangeValue: duplicate entry <Library.vector=vector.dll> for level 0; ignored
Warning in TEnvRec::ChangeValue: duplicate entry <Library.vector=vector.dll> for level 0; ignored
Warning in TEnvRec::ChangeValue: duplicate entry <Library.vector=vector.dll> for level 0; ignored
This is what is happening with some atlas user analysis scripts at pic. If the user has an argument with a long list of files separated by commas, the ROOT module makes the script hang and stays like that for ever. I have retrieved the list of files the user was passing to its script and I have run manually the command. This is what I get:
[atpilot002@td425 tmp]$ python slim.py dcap://dcap.pic.es:22125/pnfs/pic.es/da … ool.root.6
*** glibc detected *** python: free(): invalid next size (normal): 0x0aff9aa8 ***
And of course it hangs for ever.
Head of the user script:
[atpilot002@td425 tmp]$ head -3 slim.py
#!/usr/bin/python
from ROOT import *
A user should be able to decide to have its script with an argument with a list of files separated by commas, but I have the impression that the ROOT module interprets as a file or something else, and making some kind of buffer overflow. In my opinion the ROOT module should not execute anything unless explicitly asked, and it does.
Version number’s:
[atpilot002@td425 tmp]$ for a in echo $PYTHONPATH |sed -e 's/:/ /g'
; do echo $a; done|grep -i root/software/atlas/ifae/prod/releases/rel_15-19/sw/lcg/app/releases/ROOT/5.22.00h/i686-slc5-gcc43-opt/root/lib
[iatpilot002@td133 tmp]$ root-config --version
5.22/00h
[atpilot002@td425 tmp]$ python --version
Python 2.5.4
Thanks so much!
Carlos