RE: CINT/ROOT crash when TF1s that use user C++ code are used from a class

From: Amnon Harel <amnon.harel_at_cern.ch>
Date: Tue, 22 Jun 2010 08:55:50 +0200


Hi John,

Thanks for looking into this.

Yes, the use of the same name was just a simplified reproduction. The problem is that I have several instances of the real class (which uses several such TF1s). So your example is also better than mine since it's closer to the real problem.

If this is a real limitation of TF1s created with methods "C", "D", and "E", that there may not be more than one TF1 using a particular user-supplied C++ function, can the developers please confirm (and document) it?

 cheers,
 Amnon

-----Original Message-----
From: John Paulo Idarraga Munoz
Sent: Mon 21-Jun-10 8:22 PM
To: Amnon Harel
Cc: roottalk_at_lxroot01.cern.ch
Subject: Re: [ROOT] CINT/ROOT crash when TF1s that use user C++ code are used from a class  

About the second point in my last email, the problem is not that you are trying to create to instances with the same name. CINT is being nice with you and it lets you do things that a compiler wouldn't aloud. But that was just a general comment. Even if you use different names for the instances of the class 'fails', the code crashes (when trying to quit CINT an all constructors are called). I am quite positive that the problem has to do with the pointer to the C-type class. You just can't have two instances of that class. Understandable but still annoying ... mmm ... any solution for this apart from writing one function per class ?

cheers,

John

On Tue, 2010-06-22 at 02:31 +0200, Amnon Harel wrote:
> Dear ROOT experts,
>
> I'm trying to work a complicated TF1 into a class that I
> use from the CINT prompt (compiled, of course). There are several
> odd failures, mostly of the memory corruption variety, whenever
> I implement the TF1 with my own C++ code.
>
> I managed to isolate one of the corruption in the following simple
> test case. The two classes "works" and "fails" are short, and
> identical
> except for the type of TF1 they create (by text or with a function).
>
> The classes are available in:
>
> http://www-d0.fnal.gov/~aharel/test_h1.h
> http://www-d0.fnal.gov/~aharel/test_h1.c
>
> The test case is below.
>
> BTW: in TF1 documentation these are methods "B" and "C".
> I started by trying method "E" and run into the same issues.
>
> Any ideas?
>
> thanks,
> Amnon
>
> harelLinux:~/cms/macros> root -n
> ROOT 5.26/00b (tags/v5-26-00b_at_32327, Feb 11 2010, 14:21:13 on linux)
> root [0] .L test_h1.c+
> Info in <TUnixSystem::ACLiC>: creating shared
> library /mnt/data/cms/macros/./test_h1_c.so
> root [1] works ww
> works::works
> root [2] works ww
> works::works
> works::~works: 152292680
> root [3] works ww
> works::works
> works::~works: 152275080
> root [4] works ww
> works::works
> works::~works: 152292680
> root [5] fails ff
> fails::fails
> root [6] fails ff
> fails::fails
> fails::~fails: 152287832
>
> *** Break *** segmentation violation
>
>
>
> ===========================================================
> There was a crash (#7 0xb724a04d in SigHandler ()
> from /mnt/data/downloads/root/lib/libCore.so).
> This is the entire stack trace of all threads:
> ===========================================================
> #0 0xb77c4422 in __kernel_vsyscall ()
> #1 0xb65f62a3 in waitpid () from /lib/tls/i686/cmov/libc.so.6
> #2 0xb659057b in ?? () from /lib/tls/i686/cmov/libc.so.6
> #3 0xb66c84fd in system () from /lib/tls/i686/cmov/libpthread.so.0
> #4 0xb724308d in TUnixSystem::Exec ()
> from /mnt/data/downloads/root/lib/libCore.so
> #5 0xb724929d in TUnixSystem::StackTrace ()
> from /mnt/data/downloads/root/lib/libCore.so
> #6 0xb7249f4d in TUnixSystem::DispatchSignals ()
> from /mnt/data/downloads/root/lib/libCore.so
> #7 0xb724a04d in SigHandler ()
> from /mnt/data/downloads/root/lib/libCore.so
> #8 0xb7240202 in sighandler ()
> from /mnt/data/downloads/root/lib/libCore.so
> #9 <signal handler called>
> #10 0x0913ba54 in ?? ()
> #11 0xb4e580e3 in G__test_h1_c_ACLiC_dict_2439_0_4 ()
> from /mnt/data/cms/macros/./test_h1_c.so
> #12 0xb6a5cc86 in Cint::G__ExceptionWrapper ()
> from /mnt/data/downloads/root/lib/libCint.so
> #13 0xb6b11fac in G__execute_call ()
> from /mnt/data/downloads/root/lib/libCint.so
> #14 0xb6b139d6 in G__call_cppfunc ()
> from /mnt/data/downloads/root/lib/libCint.so
> #15 0xb6af0d09 in G__interpret_func ()
> from /mnt/data/downloads/root/lib/libCint.so
> #16 0xb6adbf42 in G__getfunction ()
> from /mnt/data/downloads/root/lib/libCint.so
> #17 0xb6bbebc0 in G__class_2nd_decl ()
> from /mnt/data/downloads/root/lib/libCint.so
> #18 0xb6bd786b in G__letvariable ()
> from /mnt/data/downloads/root/lib/libCint.so
> #19 0xb6aa28ea in G__define_var ()
> from /mnt/data/downloads/root/lib/libCint.so
> #20 0xb6b40177 in G__exec_statement ()
> from /mnt/data/downloads/root/lib/libCint.so
> #21 0xb6a977aa in G__exec_tempfile_core ()
> from /mnt/data/downloads/root/lib/libCint.so
> #22 0xb6a97ab9 in G__exec_tempfile_fp ()
> from /mnt/data/downloads/root/lib/libCint.so
> #23 0xb6b4fddd in G__process_cmd ()
> from /mnt/data/downloads/root/lib/libCint.so
> #24 0xb7232ae4 in TCint::ProcessLine ()
> from /mnt/data/downloads/root/lib/libCore.so
> #25 0xb714e177 in TApplication::ProcessLine ()
> from /mnt/data/downloads/root/lib/libCore.so
> #26 0xb681c2de in TRint::HandleTermInput ()
> from /mnt/data/downloads/root/lib/libRint.so
> #27 0xb681bd95 in TTermInputHandler::Notify ()
> from /mnt/data/downloads/root/lib/libRint.so
> #28 0xb681ee24 in TTermInputHandler::ReadNotify ()
> from /mnt/data/downloads/root/lib/libRint.so
> #29 0xb7246f09 in TUnixSystem::CheckDescriptors ()
> from /mnt/data/downloads/root/lib/libCore.so
> #30 0xb7247566 in TUnixSystem::DispatchOneEvent ()
> from /mnt/data/downloads/root/lib/libCore.so
> #31 0xb71b5df1 in TSystem::InnerLoop ()
> from /mnt/data/downloads/root/lib/libCore.so
> #32 0xb71b8d5b in TSystem::Run ()
> from /mnt/data/downloads/root/lib/libCore.so
> #33 0xb714b957 in TApplication::Run ()
> from /mnt/data/downloads/root/lib/libCore.so
> #34 0xb681e8e0 in TRint::Run ()
> from /mnt/data/downloads/root/lib/libRint.so
> #35 0x08048ec5 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.
> ===========================================================
> #10 0x0913ba54 in ?? ()
> ===========================================================
>
>
>
>
Received on Tue Jun 22 2010 - 09:00:37 CEST

This archive was generated by hypermail 2.2.0 : Tue Jun 22 2010 - 11:50:01 CEST