Custom class crash/hang before terminate (during merge?)

[Version 5.34/12]
I’m having a strange problem with my PROOF sessions when I add a custom class to my output list. To try and debug it, I started commenting out parts of the custom class until the PROOF session would complete.

Here’s the header for the custom class, with lots of stuff commented out. In this state, the PROOF session works fine (it doesn’t do anything, but it will complete without complaints).

[code]class xy_pmtdata : public TNamed
{
public:
xy_pmtdata();
xy_pmtdata(double x, double y, int id);
virtual ~xy_pmtdata();
//double fitfunc(double* x, double* params);
//TF1* func;
//TSpline3* find_lrf();
double get_lrf_at_xy(double x, double y);
double get_lrf_error_at_xy(double x, double y);
double get_lrf_at_bin(const int bin);
double get_lrf_error_at_bin(const int bin);

void add_event(double x, double y, double lightfrac);
void clear_plot();
void set_graphs();
bool bin_in_detector(int bin);

//Long64_t Merge(TCollection *);

//TProfile2D* lrf;
// TH2D* lrfInter;
// TProfile2D* lrf_errors;
// TH2D* errorInter;
// TH2F* lrf_1D;
double pmt_x;
double pmt_y;
int pmtid;
/*
char title [20];
char title_plot [20];
char title_lrf_1D [20];
char title_err_inter [20];
char title_lrf_inter [20];*/

//static TProfile2D* lrf_prototype;

ClassDef(xy_pmtdata,3);

};[/code]

If I uncomment this line:

The PROOF session segfaults:

[code]Info in TProofLite::SetQueryRunning: starting query: 1
Info in TProofQueryResult::SetRunning: nwrks: 4
Looking up for exact location of files: OK (1 files)
Looking up for exact location of files: OK (1 files)
Info in TPacketizerAdaptive::TPacketizerAdaptive: Setting max number of workers per node to 4
Validating files: OK (1 files)
Info in TPacketizerAdaptive::InitStats: fraction of remote files 0.000000

*** Break *** segmentation violation

===========================================================
There was a crash.
This is the entire stack trace of all threads:

#0 0x0000003fc30ac8be in waitpid () from /lib64/libc.so.6
#1 0x0000003fc303e909 in do_system () from /lib64/libc.so.6
#2 0x00007f6098c0180c in TUnixSystem::StackTrace() () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libCore.so
#3 0x00007f6098c0343c in TUnixSystem::DispatchSignals(ESignals) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libCore.so
#4
#5 0x00007f609615da89 in TInstrumentedIsAProxy::operator()(void const*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libHist.so
#6 0x00007f6098bd1f8e in TClass::GetActualClass(void const*) const () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libCore.so
#7 0x00007f609696072a in TBufferFile::WriteObjectAny(void const*, TClass const*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#8 0x00007f6096963240 in TBufferFile::WriteFastArray(void**, TClass const*, int, bool, TMemberStreamer*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#9 0x00007f6096abc1c1 in int TStreamerInfo::WriteBufferAux<char**>(TBuffer&, char** const&, int, int, int, int) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#10 0x00007f60969bb06e in TStreamerInfoActions::GenericWriteAction(TBuffer&, void*, TStreamerInfoActions::TConfiguration const*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#11 0x00007f60969624bd in TBufferFile::ApplySequence(TStreamerInfoActions::TActionSequence const&, void*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#12 0x00007f609696149c in TBufferFile::WriteClassBuffer(TClass const*, void*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#13 0x00007f6096963a53 in TBufferFile::WriteObjectClass(void const*, TClass const*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#14 0x00007f609696074d in TBufferFile::WriteObjectAny(void const*, TClass const*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#15 0x00007f60969938c1 in TGenCollectionStreamer::WriteMap(int, TBuffer&) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#16 0x00007f609699660e in TGenCollectionStreamer::Streamer(TBuffer&) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#17 0x00007f60969668ab in TCollectionStreamer::Streamer(TBuffer&, void*, int, TClass*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#18 0x00007f6096962bb2 in TBufferFile::WriteFastArray(void*, TClass const*, int, TMemberStreamer*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#19 0x00007f6096abdd58 in int TStreamerInfo::WriteBufferAux<char**>(TBuffer&, char** const&, int, int, int, int) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#20 0x00007f60969bb06e in TStreamerInfoActions::GenericWriteAction(TBuffer&, void*, TStreamerInfoActions::TConfiguration const*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#21 0x00007f60969624bd in TBufferFile::ApplySequence(TStreamerInfoActions::TActionSequence const&, void*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#22 0x00007f609696149c in TBufferFile::WriteClassBuffer(TClass const*, void*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#23 0x00007f6096962bb2 in TBufferFile::WriteFastArray(void*, TClass const*, int, TMemberStreamer*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#24 0x00007f6096abd21d in int TStreamerInfo::WriteBufferAux<char**>(TBuffer&, char** const&, int, int, int, int) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#25 0x00007f60969bb06e in TStreamerInfoActions::GenericWriteAction(TBuffer&, void*, TStreamerInfoActions::TConfiguration const*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#26 0x00007f60969624bd in TBufferFile::ApplySequence(TStreamerInfoActions::TActionSequence const&, void*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#27 0x00007f609696149c in TBufferFile::WriteClassBuffer(TClass const*, void*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#28 0x00007f6096963a53 in TBufferFile::WriteObjectClass(void const*, TClass const*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#29 0x00007f6096960782 in TBufferFile::WriteObjectAny(void const*, TClass const*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#30 0x00007f6098bb80ee in TList::Streamer(TBuffer&) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libCore.so
#31 0x00007f6096963a53 in TBufferFile::WriteObjectClass(void const*, TClass const*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#32 0x00007f609696074d in TBufferFile::WriteObjectAny(void const*, TClass const*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#33 0x00007f6092836eb9 in TProofPlayerLite::Process(TDSet*, char const*, char const*, long long, long long) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libProofPlayer.so
#34 0x00007f6092bb24e0 in TProofLite::Process(TDSet*, char const*, char const*, long long, long long) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libProof.so
#35 0x00007f6092b7042c in TProof::Process(TDSet*, TSelector*, char const*, long long, long long) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libProof.so
#36 0x00007f6093dd4fa5 in G__ManualTree2_119_0_147(G__value*, char const*, G__param*, int) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libTree.so
#37 0x00007f60978d8d2e in Cint::G__ExceptionWrapper(int ()(G__value, char const*, G__param*, int), G__value*, char*, G__param*, int) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libCint.so
#38 0x00007f6097981a37 in G__execute_call () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libCint.so
#39 0x00007f6097981dad in G__call_cppfunc () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libCint.so
#40 0x00007f609796391c in G__interpret_func () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libCint.so
#41 0x00007f6097950eef in G__getfunction () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libCint.so
#42 0x00007f6097a2e686 in G__getstructmem(int, G__FastAllocString&, char*, int, char*, int*, G__var_array*, int) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libCint.so
#43 0x00007f6097a27015 in G__getvariable () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libCint.so
#44 0x00007f609792b87f in G__getitem () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libCint.so
#45 0x00007f60979320f6 in G__getexpr () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libCint.so
#46 0x00007f60979b0a21 in G__exec_statement () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libCint.so
#47 0x00007f609791839d in G__exec_tempfile_core () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libCint.so
#48 0x00007f60979198fe in G__exec_tempfile_fp () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libCint.so
#49 0x00007f60979bd689 in G__process_cmd () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libCint.so
#50 0x00007f6098bc8ec2 in TCint::ProcessLine(char const*, TInterpreter::EErrorCode*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libCore.so
#51 0x00007f6098b2ebb2 in TApplication::ProcessLine(char const*, bool, int*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libCore.so
#52 0x00007f60987883a3 in TRint::HandleTermInput() () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRint.so
#53 0x00007f6098c02bd4 in TUnixSystem::CheckDescriptors() () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libCore.so
#54 0x00007f6098c03747 in TUnixSystem::DispatchOneEvent(bool) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libCore.so
#55 0x00007f6098b8657e in TSystem::InnerLoop() () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libCore.so
#56 0x00007f6098b872c0 in TSystem::Run() () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libCore.so
#57 0x00007f6098b2d657 in TApplication::Run(bool) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libCore.so
#58 0x00007f6098789633 in TRint::Run(bool) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRint.so
#59 0x000000000040124f in main ()

The lines below might hint at the cause of the crash.
If they do not help you then please submit a bug report at
http://root.cern.ch/bugs. Please post the ENTIRE stack trace
from above as an attachment in addition to anything else
that might help us fixing this issue.

#5 0x00007f609615da89 in TInstrumentedIsAProxy::operator()(void const*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libHist.so
#6 0x00007f6098bd1f8e in TClass::GetActualClass(void const*) const () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libCore.so
#7 0x00007f609696072a in TBufferFile::WriteObjectAny(void const*, TClass const*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#8 0x00007f6096963240 in TBufferFile::WriteFastArray(void**, TClass const*, int, bool, TMemberStreamer*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#9 0x00007f6096abc1c1 in int TStreamerInfo::WriteBufferAux<char**>(TBuffer&, char** const&, int, int, int, int) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#10 0x00007f60969bb06e in TStreamerInfoActions::GenericWriteAction(TBuffer&, void*, TStreamerInfoActions::TConfiguration const*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#11 0x00007f60969624bd in TBufferFile::ApplySequence(TStreamerInfoActions::TActionSequence const&, void*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#12 0x00007f609696149c in TBufferFile::WriteClassBuffer(TClass const*, void*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#13 0x00007f6096963a53 in TBufferFile::WriteObjectClass(void const*, TClass const*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#14 0x00007f609696074d in TBufferFile::WriteObjectAny(void const*, TClass const*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#15 0x00007f60969938c1 in TGenCollectionStreamer::WriteMap(int, TBuffer&) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#16 0x00007f609699660e in TGenCollectionStreamer::Streamer(TBuffer&) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#17 0x00007f60969668ab in TCollectionStreamer::Streamer(TBuffer&, void*, int, TClass*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#18 0x00007f6096962bb2 in TBufferFile::WriteFastArray(void*, TClass const*, int, TMemberStreamer*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#19 0x00007f6096abdd58 in int TStreamerInfo::WriteBufferAux<char**>(TBuffer&, char** const&, int, int, int, int) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#20 0x00007f60969bb06e in TStreamerInfoActions::GenericWriteAction(TBuffer&, void*, TStreamerInfoActions::TConfiguration const*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#21 0x00007f60969624bd in TBufferFile::ApplySequence(TStreamerInfoActions::TActionSequence const&, void*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#22 0x00007f609696149c in TBufferFile::WriteClassBuffer(TClass const*, void*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#23 0x00007f6096962bb2 in TBufferFile::WriteFastArray(void*, TClass const*, int, TMemberStreamer*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#24 0x00007f6096abd21d in int TStreamerInfo::WriteBufferAux<char**>(TBuffer&, char** const&, int, int, int, int) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#25 0x00007f60969bb06e in TStreamerInfoActions::GenericWriteAction(TBuffer&, void*, TStreamerInfoActions::TConfiguration const*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#26 0x00007f60969624bd in TBufferFile::ApplySequence(TStreamerInfoActions::TActionSequence const&, void*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#27 0x00007f609696149c in TBufferFile::WriteClassBuffer(TClass const*, void*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#28 0x00007f6096963a53 in TBufferFile::WriteObjectClass(void const*, TClass const*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#29 0x00007f6096960782 in TBufferFile::WriteObjectAny(void const*, TClass const*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#30 0x00007f6098bb80ee in TList::Streamer(TBuffer&) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libCore.so
#31 0x00007f6096963a53 in TBufferFile::WriteObjectClass(void const*, TClass const*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#32 0x00007f609696074d in TBufferFile::WriteObjectAny(void const*, TClass const*) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libRIO.so
#33 0x00007f6092836eb9 in TProofPlayerLite::Process(TDSet*, char const*, char const*, long long, long long) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libProofPlayer.so
#34 0x00007f6092bb24e0 in TProofLite::Process(TDSet*, char const*, char const*, long long, long long) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libProof.so
#35 0x00007f6092b7042c in TProof::Process(TDSet*, TSelector*, char const*, long long, long long) () from /ds50/app/products/root/v5_34_12/Linux64bit+2.6-2.12-e4-prof/lib/libProof.so

[/code]

Is there a known reason why a custom class containing a TProfile2D* can’t be added to the output list of a TSelector?

Editing in some more info:

If instead of adding an instance of this class to the output list, I choose a different custom class (containing a TProfile2D*), the PROOF session will complete without complaints, so I guess it’s not just the TProfile2D*.

I managed to fix this. My error was not including the header files in with the TProof::Load() calls. Now that I know that’s possible and necessary, it works fine. I’m surprised things worked at all when I wasn’t passing Proof the header files!