TProof: Errors with std::map in TNamed

Hello Again,

I have a Process running through a TProof file:

auto parameters = new Parameters("test");
fProof->AddInput(parameters);
fProof->Load("methods.h+");
fProof->Load("parameters.h+");
fProof->Process(dset,"ReaderClass.C++");

In my parameters class (which extends TNamed), I have a private member:

map<TString,PlotTools> map_plotTools;

When I try to run my code, if I have that map in parameters.h, I get an error that I THINK has to do with the destructor…

*** Break *** segmentation violation



===========================================================
There was a crash.
This is the entire stack trace of all threads:
===========================================================
#0  0x00007f8ba9a3441c in waitpid () from /lib64/libc.so.6
#1  0x00007f8ba99b1f12 in do_system () from /lib64/libc.so.6
#2  0x00007f8b9f430ebd in TUnixSystem::StackTrace() () from /cvmfs/sft.cern.ch/lcg/releases/LCG_94/ROOT/6.14.04/x86_64-slc6-gcc62-opt/lib/libCore.so
#3  0x00007f8b9f433624 in TUnixSystem::DispatchSignals(ESignals) () from /cvmfs/sft.cern.ch/lcg/releases/LCG_94/ROOT/6.14.04/x86_64-slc6-gcc62-opt/lib/libCore.so
#4  <signal handler called>
#5  0x00007f8ba9d36f58 in main_arena () from /lib64/libc.so.6
#6  0x00007f8b9f3d4551 in TClass::Destructor(void*, bool) () from /cvmfs/sft.cern.ch/lcg/releases/LCG_94/ROOT/6.14.04/x86_64-slc6-gcc62-opt/lib/libCore.so
#7  0x00007f8ba045ae46 in TBufferFile::ReadFastArray(void**, TClass const*, int, bool, TMemberStreamer*, TClass const*) () from /cvmfs/sft.cern.ch/lcg/releases/LCG_94/ROOT/6.14.04/x86_64-slc6-gcc62-opt/lib/libRIO.so
#8  0x00007f8ba06b9f8c in int TStreamerInfo::ReadBuffer<char**>(TBuffer&, char** const&, TStreamerInfo::TCompInfo* const*, int, int, int, int, int) () from /cvmfs/sft.cern.ch/lcg/releases/LCG_94/ROOT/6.14.04/x86_64-slc6-gcc62-opt/lib/libRIO.so
#9  0x00007f8ba051dbad in TStreamerInfoActions::GenericReadAction(TBuffer&, void*, TStreamerInfoActions::TConfiguration const*) () from /cvmfs/sft.cern.ch/lcg/releases/LCG_94/ROOT/6.14.04/x86_64-slc6-gcc62-opt/lib/libRIO.so
#10 0x00007f8ba0461c0e in TBufferFile::ReadClassBuffer(TClass const*, void*, TClass const*) () from /cvmfs/sft.cern.ch/lcg/releases/LCG_94/ROOT/6.14.04/x86_64-slc6-gcc62-opt/lib/libRIO.so
#11 0x00007f8ba0462d2b in TBufferFile::ReadObjectAny(TClass const*) () from /cvmfs/sft.cern.ch/lcg/releases/LCG_94/ROOT/6.14.04/x86_64-slc6-gcc62-opt/lib/libRIO.so
#12 0x00007f8ba04cb6e0 in TGenCollectionStreamer::ReadMap(int, TBuffer&, TClass const*) () from /cvmfs/sft.cern.ch/lcg/releases/LCG_94/ROOT/6.14.04/x86_64-slc6-gcc62-opt/lib/libRIO.so
#13 0x00007f8ba04cd65b in TGenCollectionStreamer::ReadBufferGeneric(TBuffer&, void*, TClass const*) () from /cvmfs/sft.cern.ch/lcg/releases/LCG_94/ROOT/6.14.04/x86_64-slc6-gcc62-opt/lib/libRIO.so
#14 0x00007f8ba045ac3a in TBufferFile::ReadFastArray(void*, TClass const*, int, TMemberStreamer*, TClass const*) () from /cvmfs/sft.cern.ch/lcg/releases/LCG_94/ROOT/6.14.04/x86_64-slc6-gcc62-opt/lib/libRIO.so
#15 0x00007f8ba058f864 in int TStreamerInfoActions::ReadSTL<&TStreamerInfoActions::ReadSTLMemberWiseSameClass, &TStreamerInfoActions::ReadSTLObjectWiseFastArray>(TBuffer&, void*, TStreamerInfoActions::TConfiguration const*) () from /cvmfs/sft.cern.ch/lcg/releases/LCG_94/ROOT/6.14.04/x86_64-slc6-gcc62-opt/lib/libRIO.so
#16 0x00007f8ba0461c0e in TBufferFile::ReadClassBuffer(TClass const*, void*, TClass const*) () from /cvmfs/sft.cern.ch/lcg/releases/LCG_94/ROOT/6.14.04/x86_64-slc6-gcc62-opt/lib/libRIO.so
#17 0x00007f8ba04cb799 in TGenCollectionStreamer::ReadMap(int, TBuffer&, TClass const*) () from /cvmfs/sft.cern.ch/lcg/releases/LCG_94/ROOT/6.14.04/x86_64-slc6-gcc62-opt/lib/libRIO.so
#18 0x00007f8ba04cd65b in TGenCollectionStreamer::ReadBufferGeneric(TBuffer&, void*, TClass const*) () from /cvmfs/sft.cern.ch/lcg/releases/LCG_94/ROOT/6.14.04/x86_64-slc6-gcc62-opt/lib/libRIO.so
#19 0x00007f8ba045ac3a in TBufferFile::ReadFastArray(void*, TClass const*, int, TMemberStreamer*, TClass const*) () from /cvmfs/sft.cern.ch/lcg/releases/LCG_94/ROOT/6.14.04/x86_64-slc6-gcc62-opt/lib/libRIO.so
#20 0x00007f8ba058f864 in int TStreamerInfoActions::ReadSTL<&TStreamerInfoActions::ReadSTLMemberWiseSameClass, &TStreamerInfoActions::ReadSTLObjectWiseFastArray>(TBuffer&, void*, TStreamerInfoActions::TConfiguration const*) () from /cvmfs/sft.cern.ch/lcg/releases/LCG_94/ROOT/6.14.04/x86_64-slc6-gcc62-opt/lib/libRIO.so
#21 0x00007f8ba0461c0e in TBufferFile::ReadClassBuffer(TClass const*, void*, TClass const*) () from /cvmfs/sft.cern.ch/lcg/releases/LCG_94/ROOT/6.14.04/x86_64-slc6-gcc62-opt/lib/libRIO.so
#22 0x00007f8ba0462d2b in TBufferFile::ReadObjectAny(TClass const*) () from /cvmfs/sft.cern.ch/lcg/releases/LCG_94/ROOT/6.14.04/x86_64-slc6-gcc62-opt/lib/libRIO.so
#23 0x00007f8b9f39b263 in TList::Streamer(TBuffer&) () from /cvmfs/sft.cern.ch/lcg/releases/LCG_94/ROOT/6.14.04/x86_64-slc6-gcc62-opt/lib/libCore.so
#24 0x00007f8b9f3035e7 in TDirectory::CloneObject(TObject const*, bool) () from /cvmfs/sft.cern.ch/lcg/releases/LCG_94/ROOT/6.14.04/x86_64-slc6-gcc62-opt/lib/libCore.so
#25 0x00007f8b9f38a40e in TCollection::Clone(char const*) const () from /cvmfs/sft.cern.ch/lcg/releases/LCG_94/ROOT/6.14.04/x86_64-slc6-gcc62-opt/lib/libCore.so
#26 0x00007f8ba1dd06ef in TQueryResult::TQueryResult(int, char const*, TList*, long long, long long, char const*) () from /cvmfs/sft.cern.ch/lcg/releases/LCG_94/ROOT/6.14.04/x86_64-slc6-gcc62-opt/lib/libTree.so
#27 0x00007f8b8f68684e in TProofQueryResult::TProofQueryResult(int, char const*, TList*, long long, long long, TDSet*, char const*, TObject*) () from /cvmfs/sft.cern.ch/lcg/releases/ROOT/6.14.04-0d8dc/x86_64-slc6-gcc62-opt/lib/libProof.so
#28 0x00007f8b8f66aeeb in TProofLite::MakeQueryResult(long long, char const*, long long, TDSet*, char const*) () from /cvmfs/sft.cern.ch/lcg/releases/ROOT/6.14.04-0d8dc/x86_64-slc6-gcc62-opt/lib/libProof.so
#29 0x00007f8b8f675f75 in TProofLite::Process(TDSet*, char const*, char const*, long long, long long) () from /cvmfs/sft.cern.ch/lcg/releases/ROOT/6.14.04-0d8dc/x86_64-slc6-gcc62-opt/lib/libProof.so
#30 0x00007f8b8df006f2 in ?? ()
#31 0x0000000000000020 in ?? ()
#32 0x00007ffc0b5796e0 in ?? ()
#33 0x000000000a102630 in ?? ()
#34 0x00007ffc0b579700 in ?? ()
#35 0x0000000005557410 in ?? ()
#36 0x00007f8b995a39bc in llvm::SelectionDAGBuilder::lowerInvokable(llvm::TargetLowering::CallLoweringInfo&, llvm::BasicBlock const*) () from /cvmfs/sft.cern.ch/lcg/releases/LCG_94/ROOT/6.14.04/x86_64-slc6-gcc62-opt/lib/libCling.so
#37 0x00007f8b9963d676 in llvm::DAGTypeLegalizer::run() () from /cvmfs/sft.cern.ch/lcg/releases/LCG_94/ROOT/6.14.04/x86_64-slc6-gcc62-opt/lib/libCling.so
#38 0x00007f8b9963dcc8 in llvm::SelectionDAG::LegalizeTypes() () from /cvmfs/sft.cern.ch/lcg/releases/LCG_94/ROOT/6.14.04/x86_64-slc6-gcc62-opt/lib/libCling.so
#39 0x00007f8b00000018 in ?? ()
#40 0x0000000000000006 in ?? ()
#41 0x000000000519cc20 in ?? ()
#42 0xffff8003f4a858b1 in ?? ()
#43 0x00007ffc00000011 in ?? ()
#44 0xffff8003f4a858a1 in ?? ()
#45 0x0000000000000010 in ?? ()
#46 0x00ff8003f4a85891 in ?? ()
#47 0x0000000005539150 in ?? ()
#48 0x00007f8b9f33a320 in ?? () from /cvmfs/sft.cern.ch/lcg/releases/LCG_94/ROOT/6.14.04/x86_64-slc6-gcc62-opt/lib/libCore.so
#49 0x00007f8baaad8cd4 in ?? ()
#50 0xffff8003f4a85871 in ?? ()
#51 0x00007ffc0000000d in ?? ()
#52 0x0000000000000003 in ?? ()
#53 0x000000000910cfd0 in ?? ()
#54 0xffff8003f4a85851 in ?? ()
#55 0x00007ffc00000010 in ?? ()
#56 0x0000000000000004 in ?? ()
#57 0x0000000000000000 in ?? ()
===========================================================

I see that this does not happen with a map that uses “standard” datatypes:

map<TString,int> map_test;

Is there something I should do in my PlotTools class so that I can have the map_plotTools in my parameters that I Add as Input to TProof?

Thanks

PS. I noticed that if I add //!

map<TString,PlotTools> map_plotTools; //!

The error does not appear, but then in my TReader class, the map is empty; even though when AddInput(parameters) is called, the map is not empty.

Also, if the map_plotTools is empty, the Segmentation error does not appear

Hi,

How is the PlotTools class implemented?

It could be that PlotTools can’t be serialized.

@ganis do you know what are the requisites for what you add as input of PROOF with AddInput ?

The class must be serializable, as for writing to a file (the same technology is used to stream over a socket). You need to create the dictionary for the class, there must be examples of how to do that for std:: collections. Usually using the ROOT own collections helps in this case, though I agree that it may be more convenient to work with std collections.

If this is for PROOF-Lite, then I would suggest to move to TProcessExecutor or even RDataFrame .

G Ganis

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.