Crash with EnergyRescalerTool

Dear experts, I’ve update the version of the EnergyRescalerTool (twiki.cern.ch/twiki/bin/view/At … gyRescaler). It’s a very very simple code, it read some numbers from a table in a file and return a number, nothing special. With the new version I got this in the slaves:

#0  0x000000384a89a115 in waitpid () from /lib64/libc.so.6
#1  0x000000384a83c481 in do_system () from /lib64/libc.so.6
#2  0x00002b2ddbb7ace0 in TUnixSystem::StackTrace ()
   from /gpfs/storage_4/users/home/proof/root/lib/libCore.so
#3  0x00002b2ddbb773db in TUnixSystem::DispatchSignals ()
   from /gpfs/storage_4/users/home/proof/root/lib/libCore.so
#4  <signal handler called>
#5  0x000000384d8b5fa2 in __gnu_cxx::__exchange_and_add ()
   from /usr/lib64/libstdc++.so.6
#6  0x000000384d89c819 in std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string () from /usr/lib64/libstdc++.so.6
#7  0x00002b2de50095a7 in ~HiggsSelector (this=0x170e9700)
    at /gpfs/storage_4/users/home/turra/Higgs/higgs/./HiggsPar/HiggsBaseSelector/HiggsSelector.h:24
#8  0x00002b2de5009621 in ~HiggsAnalysis (this=0x170e9700)
    at /gpfs/storage_4/users/home/turra/Higgs/higgs/./HiggsAnalysis.h:19
#9  0x00002b2de4e73616 in TProofPlayer::~TProofPlayer ()
   from /gpfs/storage_4/users/home/proof/root/lib/libProofPlayer.so
#10 0x00002b2de4e84aa1 in TProofPlayerSlave::~TProofPlayerSlave ()

It seems that the slave crash in the destructor. In the master I got:


#0  0x000000384a89a115 in waitpid () from /lib64/libc.so.6
#1  0x000000384a83c481 in do_system () from /lib64/libc.so.6
#2  0x00002b2bcc9a9ce0 in TUnixSystem::StackTrace ()
   from /gpfs/storage_4/users/home/proof/root/lib/libCore.so
#3  0x00002b2bcc9a63db in TUnixSystem::DispatchSignals ()
   from /gpfs/storage_4/users/home/proof/root/lib/libCore.so
#4  <signal handler called>
#5  0x000000384d89b588 in std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string () from /usr/lib64/libstdc++.so.6
#6  0x00002b2bd7f4ed7f in HiggsAnalysis::Terminate (this=0x1e2a54d0)
    at /gpfs/storage_4/users/home/turra/Higgs/higgs/./HiggsAnalysis.C:323
#7  0x00002b2bd213b331 in TProofPlayerLite::Finalize ()
   from /gpfs/storage_4/users/home/proof/root/lib/libProofPlayer.so
#8  0x00002b2bd213c701 in TProofPlayerLite::Process ()

and

 *** Break *** write on a pipe with no one to read it
SysError in <TUnixSystem::UnixSend>: send (Broken pipe)

 *** Break *** write on a pipe with no one to read it
SysError in <TUnixSystem::UnixSend>: send (Broken pipe)

 *** Break *** write on a pipe with no one to read it
SysError in <TUnixSystem::UnixSend>: send (Broken pipe)

 *** Break *** write on a pipe with no one to read it
SysError in <TUnixSystem::UnixSend>: send (Broken pipe)

....

This tool is a class declared as class member (no pointer). It has a nohop destructor ({ }). If I go back to the previous version of the tool everythings work. Using prooflite 5.28c.

Do you have some hints?

Someone really to explain me why…

I’ve added in HiggsSelector.h this line:

~HiggsSelector() {cout << "INFO: ~HiggsSelector()" << endl; }

and now all work. This is completely magic.

Hi,

Adding something to the destructor implies to recompile it.
Your two crashes were not at the same place but they were both related to std::~basic_string . Are you sure you were using compatible binaries?
Are you able to reproduce the crash going back to the previous ~HiggsSelector ?

Gerri

[quote=“ganis”]Hi,

Adding something to the destructor implies to recompile it.
Your two crashes were not at the same place but they were both related to std::~basic_string . Are you sure you were using compatible binaries?
Are you able to reproduce the crash going back to the previous ~HiggsSelector ?

Gerri[/quote]

I’m really surprised. I’ve commented the HiggSelector destructor and it works… I’m sure I’m using compatible binaries, everythings is inside a par file and I’m using ClearPackages.

I didn’t look at the previous replies, but I will note that the version of the EnergyRescalerTool bundled in SUSYTools works fine with PROOF, so maybe you want to compare your code to that.