Hi all,
I am trying to migrate my analysis from “plain” root/cint to proof.
I have a macro like this:
{
TProof * p=TProof::Open(“xrootd@grid006.roma2.infn.it:1093”);
TChain* myChain1=new TChain(“myTree”);
myChain1->Add("/some/path/*root");
myChain1->SetProof();
myChain1->Process(“MySelector.C++”,“some parameter”);
TChain* myChain2=new TChain(“myTree”);
myChain2->Add("/some/different/path/*root");
myChain2->SetProof();
myChain2->Process(“MySelector.C++”,“some different parameter”);
// repeat the above several times, each time with a different chain
}
MySelector.C is coming from TTree::MakeSelector (with mods in the Process method of course)
What happens is that the first chain is processed smoothly, but when trying to process the following ones, some workers crash misteriously, with a stack pointing to TTree::SetBranchAddress:
08:41:20 21160 Wrk-0.3 | *** Break : illegal instruction
Generating stack trace…
0x00df39f8 in from /lib/tls/libc.so.6
0x078b184a in TTree::SetBranchAddress(char const, void, TBranch*, TClass*, EDataType, bool) + 0x56 from /opt/root/lib/libTree.so
0x01053fca in Z2mD3PDSelector::Init(TTree*) + 0x145e from /home/xrootd/proof/session-grid006-1272436592-24757/worker-0.3-grid007-1272436596-21160/./Z2mD3PDSelector_C.so
At the second chain, some workers die, at the third some of the remaining ones die and so on and soon I am left with no workers at all…
The crash does not depend on the input files, but really on the fact that another chain was processed previously: the crashing jobs do not crash if they are the first ones to be processed.
I can share the code of the selector class of course, but I was kind of hoping that there is something wrong in my processing multiple chains with the same TProof setup. What is the recommended way to do so?
Thanks for your help,
Andrea.