Crash using TFile

Hi -

I’m working on a research project to make a MySQL plugin read information from ROOT files. I’ve created a simple class RootReader to open a ROOT file and see if it contains a TTree, in which case it’s considered valid for the purposes of this project:

RootReader::RootReader(char* fn) { strcpy(filename, fn); } // constructor

bool RootReader::isValid() {
TFile file(filename);
if (file.IsZombie()) return false;
TTree* tree = (TTree*)file.Get(“CollectionTree”);
bool foundTree = (tree != NULL);
return foundTree;
}

When I use RootReader in a simple C program it works fine. However, when I link RootReader and the ROOT libs into MySQL, there is a seg fault deep inside the ROOT call chain during the call to the TFile constructor. This seg fault does not always occur at the same line of code but always happens somewhere inside cint/src/v6_func.cxx. I suspect some kind of memory corruption.

The Makefile.am used to build the shared lib libRootWrapper that contains RootReader and links to the ROOT libs is included at the end of this post. The Makefile that links libRootWrapper into MySQL is similar.

Here is a stack trace showing the seg fault:

Program received signal SIGSEGV, Segmentation fault.
#0 0x00002aaaac47d72c in G__interpret_func (result7=0x0, funcname=0x0,
libp=0x0, hash=0, p_ifunc=0x0, funcmatch=0, memfunc_flag=1)
at cint/src/v6_ifunc.cxx:4764
#1 0x00002aaaac46dae3 in G__getfunction (
item=0xe9f24c “AddHandler(“TArchiveFile”,”.+[.]zip$",“TZIPFile”,“Core”,“TZIPFile(const char*,const char*,TFile*)”)", known3=0x40a5b408,
memfunc_flag=1) at cint/src/v6_func.cxx:2517
#2 0x00002aaaac54aceb in G__getstructmem (store_var_type=112,
varname=0x40a5a4b0 “”,
membername=0xe9f24c “AddHandler(“TArchiveFile”,”.+[.]zip$",“TZIPFile”,“Core”,“TZIPFile(const char*,const char*,TFile*)”)",
tagname=0x40a5a6b0 “gPluginMgr”, known2=0x40a5b408,
varglobal=0x2aaaac7fbc80, objptr=2) at cint/src/v6_var.cxx:6611
#3 0x00002aaaac53a6e9 in G__getvariable (
item=0xe9f240 “gPluginMgr->AddHandler(“TArchiveFile”,”.+[.]zip$",“TZIPFile”,“Core”,“TZIPFile(const char*,const char*,TFile*)”)",
known=0x40a5b408, varglobal=0x2aaaac7fbc80, varlocal=0x40a6db20)
at cint/src/v6_var.cxx:5242
#4 0x00002aaaac438166 in G__getitem (
item=0xe9f240 “gPluginMgr->AddHandler(“TArchiveFile”,”.+[.]zip$",“TZIPFile”,“Core”,“TZIPFile(const char*,const char*,TFile*)”)")
at cint/src/v6_expr.cxx:1884
#5 0x00002aaaac44b796 in G__getexpr (
expression=0x40a5e1e0 “gPluginMgr->AddHandler(“TArchiveFile”,”.+[.]zip$",“TZIPFile”,“Core”,“TZIPFile(const char*,const char*,TFile*)”)")
at cint/src/v6_expr.cxx:1470
#6 0x00002aaaac4c9c04 in G__exec_function (
statement=0x40a5e1e0 “gPluginMgr->AddHandler(“TArchiveFile”,”.+[.]zip$",“TZIPFile”,“Core”,“TZIPFile(const char*,const char*,TFile*)”)",
pc=0x40a5e96c, piout=0x40a5e968, plargestep=0x40a5e960, presult=0x40a5e8f0)
at cint/src/v6_parse.cxx:600
#7 0x00002aaaac4d296c in G__exec_statement (mparen=0x40a6dd84)
at cint/src/v6_parse.cxx:6997
#8 0x00002aaaac4813f4 in G__interpret_func (result7=0x40a74c10,
funcname=0x40a74610 “P010_TZIPFile”, libp=0x40a6e400, hash=1031,
p_ifunc=0xef9970, funcmatch=1, memfunc_flag=0)
at cint/src/v6_ifunc.cxx:5966
#9 0x00002aaaac46e872 in G__getfunction (item=0x40a77690 “P010_TZIPFile()”,
known3=0x40a750f8, memfunc_flag=0) at cint/src/v6_func.cxx:2728
#10 0x00002aaaac4382c7 in G__getitem (item=0x40a77690 “P010_TZIPFile()”)
at cint/src/v6_expr.cxx:1896
#11 0x00002aaaac44b796 in G__getexpr (expression=0xcc5d30 “P010_TZIPFile()”)
at cint/src/v6_expr.cxx:1470
#12 0x00002aaaac44d0ff in G__calc_internal (
exprwithspace=0x40a7a010 “P010_TZIPFile()”) at cint/src/v6_expr.cxx:1061
#13 0x00002aaaac4e1d5d in G__process_cmd (
line=0x2aaaac2b08fe “.X /etc/root/plugins/TArchiveFile/P010_TZIPFile.C”,
prompt=0xe471e8 “”, more=0xe471e0, err=0x40a7b07c, rslt=0x40a7aff0)
at cint/src/v6_pause.cxx:2231
#14 0x00002aaaabb53418 in TCint::ProcessLine (this=0xe471b0,
line=0x2aaaac2b08fe “.X /etc/root/plugins/TArchiveFile/P010_TZIPFile.C”,
error=0x0) at meta/src/TCint.cxx:333
#15 0x00002aaaabb4c321 in TCint::ProcessLineSynch (this=0xe471b0,
line=0x2aaaac2b08fe “.X /etc/root/plugins/TArchiveFile/P010_TZIPFile.C”,
error=0x0) at meta/src/TCint.cxx:368
—Type to continue, or q to quit—
#16 0x00002aaaaba939b9 in TApplication::ExecuteFile (
file=0xcc6b08 “/etc/root/plugins/TArchiveFile/P010_TZIPFile.C”, error=0x0)
at base/src/TApplication.cxx:924
#17 0x00002aaaabb4fd13 in TCint::ExecuteMacro (this=0xe471b0,
filename=0xcc6b08 “/etc/root/plugins/TArchiveFile/P010_TZIPFile.C”,
error=0x0) at meta/src/TCint.cxx:996
#18 0x00002aaaabaea281 in TROOT::Macro (this=0x2aaaac29cc40,
filename=0xcc2500 “/etc/root/plugins/TArchiveFile/P010_TZIPFile.C”,
error=0x0, padUpdate=false) at base/src/TROOT.cxx:1403
#19 0x00002aaaabac8731 in TPluginManager::LoadHandlerMacros (this=0xe43590,
path=0xe7c6c0 “/etc/root/plugins/TArchiveFile”)
at base/src/TPluginManager.cxx:390
#20 0x00002aaaabac8bdf in TPluginManager::LoadHandlersFromPluginDirs (
this=0xe43590, base=0x2aaaad85d843 “TArchiveFile”)
at base/src/TPluginManager.cxx:462
#21 0x00002aaaabacab74 in TPluginManager::FindHandler (this=0xe43590,
base=0x2aaaad85d843 “TArchiveFile”,
uri=0xcc5648 “petaminer/Egamma0002.root”)
at base/src/TPluginManager.cxx:539
#22 0x00002aaaad7425bb in TArchiveFile::Open (
url=0xeadac8 “file:petaminer/Egamma0002.root”, file=0x40a7bc50)
at io/src/TArchiveFile.cxx:128
#23 0x00002aaaad76c0d9 in TFile (this=0x40a7bc50,
fname1=0xc97518 “petaminer/Egamma0002.root”, option=0x2aaaae6c73af “”,
ftitle=0x2aaaae6c73af “”, compress=1) at io/src/TFile.cxx:315
#24 0x00002aaaae6c6fad in RootReader::isValid (this=0x40a7c100)
at RootReader.cxx:29

Any advice much appreciated!

Thanks -
Paul

-------------- Makefile.am -------------------

Library

lib_LTLIBRARIES = libRootWrapper.la
pkginclude_HEADERS = RootReader.h RootWriter.h
libRootWrapper_la_SOURCES = RootReader.cxx RootWriter.cxx
libRootWrapper_la_LDFLAGS = -version-info 1:0 -R @ROOTLIBDIR@
libRootWrapper_la_LIBADD = -L@ROOTLIBDIR@ @ROOTLIBS@ @ROOTAUXLIBS@

AM_CPPFLAGS = -Wall -I@ROOTINCDIR@
AM_LDFLAGS = -L@ROOTLIBDIR@

Executables

bin_PROGRAMS = testRead testWrite
testRead_SOURCES = testRead.cxx
testRead_LDADD = @ROOTLIBS@ libRootWrapper.la

testWrite_SOURCES = testWrite.cxx
testWrite_LDADD = @ROOTLIBS@ libRootWrapper.la

What is “filename” in your constructor? a class member? if yse, did you check that this member is correctly declared and suitably dimensionned?

Rene

filename is just an ordinary C string. Here is RootReader.h:

class RootReader {

public:

RootReader(char* filename);

/**

  • isValid
  • @return true if file contains expected format
    */
    bool isValid();

private:

char filename[256];

};

Hi,

Are you using shared libraries or static libraries? Did you link you plugin with g++, ar or ld?

You might have to make sure a TApplication object has been created.

Cheers,
Philippe.

I’m building a shared library libRootWrapper.so that links to the ROOT shared libs. libRootWrapper is linked into a MySQL plugin library named ha_root.so.

Here is the automake link command where the MySQL build creates the ha_root.so plugin library and links in the ROOT libs and libRootWrapper:

/usr/bin/g++ -shared -nostdlib /usr/lib/gcc/x86_64-redhat-linux/4.1.2/…/…/…/…/lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/4.1.2/crtbeginS.o .libs/ha_root_la-ha_root.o -Wl,–rpath -Wl,/home/research/paulh/projects/petaminer/lib -Wl,–rpath -Wl,/home/research/paulh/projects/petaminer/lib -Wl,–rpath -Wl,/contrib/root/lib/root -L/contrib/root/lib/root -lCore -lCint -lHist -lMatrix -lRIO -lTree -lSQL -lNet -lThread /home/research/paulh/projects/petaminer/lib/libRootWrapper.so -lpthread -lcrypt -lnsl -lm -lpthread -L/usr/lib/gcc/x86_64-redhat-linux/4.1.2 -L/usr/lib/gcc/x86_64-redhat-linux/4.1.2/…/…/…/…/lib64 -L/lib/…/lib64 -L/usr/lib/…/lib64 -lstdc++ -lm -lgcc_s -lc -lgcc_s /usr/lib/gcc/x86_64-redhat-linux/4.1.2/crtendS.o /usr/lib/gcc/x86_64-redhat-linux/4.1.2/…/…/…/…/lib64/crtn.o -Wl,-soname -Wl,ha_root.so.0 -o .libs/ha_root.so.0.0.0

I tried initializing ROOT’s TApplication in RootReader::isValid() just before the TFile is constructed:

int argc = 0;
char* argv[] = {};
TApplication theApp(“App”, &argc, argv);

but still get a seg fault in the TFile constructor:

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 1084762448 (LWP 23170)]
0x00002aaaac47d72c in G__interpret_func (result7=0x0, funcname=0x0, libp=0x0,
hash=0, p_ifunc=0x0, funcmatch=0, memfunc_flag=1)
at cint/src/v6_ifunc.cxx:4764

This method getting all null arguments looks suspicious to me.

I set UseThreads to true in system.rootrc in case multithreading might have something to do with this:

Use thread library (if exists).

Unix.*.Root.UseThreads: true

but still get the same result.

Thanks -
Paul

Which version of ROOT are you using?
Are you able to use valgrind on your executable?

Philippe.

Ps. By the way what do you mean by an MySQL plugin?

Philippe -

First of all, I really appreciate your help on this.

A MySQL plugin is a library that is dynamically loaded by MySQL to implement a database storage engine. I want MySQL to read data from ROOT files, so that is why the MySQL plugin must make ROOT API calls.

$ root --version


  •                                     *
    
  •    W E L C O M E  to  R O O T       *
    
  •                                     *
    
  • Version 5.18/00 16 January 2008 *
  •                                     *
    
  • You are welcome to visit our Web site *
  •      [root.cern.ch](http://root.cern.ch)            *
    
  •                                     *
    

ROOT 5.18/00 (branches/v5-18-00-patches@22235, Sep 04 2008, 17:10:21 on linuxx8664gcc)
CINT/ROOT C/C++ Interpreter version 5.16.29, Jan 08, 2008

Here is what valgrind outputs when the seg fault occurs:

RootReader Egamma0002.root
RootReader::isValid Egamma0002.root

*** Break *** segmentation violation
==23312== Thread 3:
==23312== Conditional jump or move depends on uninitialised value(s)
==23312== at 0x35E2E05DA3: __reclaim_stacks (in /lib64/libpthread-2.7.so)
==23312== by 0x35E229AE4E: fork (in /lib64/libc-2.7.so)
==23312== by 0x35E226357C: _IO_proc_open@@GLIBC_2.2.5 (in /lib64/libc-2.7.so)
==23312== by 0x35E22637E8: popen@@GLIBC_2.2.5 (in /lib64/libc-2.7.so)
==23312== by 0x67E7E44: TUnixSystem::OpenPipe(char const*, char const*) (TUnixSystem.cxx:1887)
==23312== by 0x67E800C: TUnixSystem::StackTrace() (TUnixSystem.cxx:2041)
==23312== by 0x67EB0EE: TUnixSystem::DispatchSignals(ESignals) (TUnixSystem.cxx:1027)
==23312== by 0x67EB212: SigHandler(ESignals) (TUnixSystem.cxx:351)
==23312== by 0x67E1C12: sighandler(int) (TUnixSystem.cxx:3290)
==23312== by 0x35E2E0E53F: (within /lib64/libpthread-2.7.so)
==23312== by 0x70CBAE2: G__getfunction (v6_func.cxx:2517)
==23312== by 0x71A8CEA: G__getstructmem (v6_var.cxx:6611)
==23312==
==23312== Conditional jump or move depends on uninitialised value(s)
==23312== at 0x35E2E05D67: __reclaim_stacks (in /lib64/libpthread-2.7.so)
==23312== by 0x35E229AE4E: fork (in /lib64/libc-2.7.so)
==23312== by 0x35E226357C: _IO_proc_open@@GLIBC_2.2.5 (in /lib64/libc-2.7.so)
==23312== by 0x35E22637E8: popen@@GLIBC_2.2.5 (in /lib64/libc-2.7.so)
==23312== by 0x67E7E44: TUnixSystem::OpenPipe(char const*, char const*) (TUnixSystem.cxx:1887)
==23312== by 0x67E800C: TUnixSystem::StackTrace() (TUnixSystem.cxx:2041)
==23312== by 0x67EB0EE: TUnixSystem::DispatchSignals(ESignals) (TUnixSystem.cxx:1027)
==23312== by 0x67EB212: SigHandler(ESignals) (TUnixSystem.cxx:351)
==23312== by 0x67E1C12: sighandler(int) (TUnixSystem.cxx:3290)
==23312== by 0x35E2E0E53F: (within /lib64/libpthread-2.7.so)
==23312== by 0x70CBAE2: G__getfunction (v6_func.cxx:2517)
==23312== by 0x71A8CEA: G__getstructmem (v6_var.cxx:6611)
==23312==
==23312== Conditional jump or move depends on uninitialised value(s)
==23312== at 0x35E2E05D75: __reclaim_stacks (in /lib64/libpthread-2.7.so)
==23312== by 0x35E229AE4E: fork (in /lib64/libc-2.7.so)
==23312== by 0x35E226357C: _IO_proc_open@@GLIBC_2.2.5 (in /lib64/libc-2.7.so)
==23312== by 0x35E22637E8: popen@@GLIBC_2.2.5 (in /lib64/libc-2.7.so)
==23312== by 0x67E7E44: TUnixSystem::OpenPipe(char const*, char const*) (TUnixSystem.cxx:1887)
==23312== by 0x67E800C: TUnixSystem::StackTrace() (TUnixSystem.cxx:2041)
==23312== by 0x67EB0EE: TUnixSystem::DispatchSignals(ESignals) (TUnixSystem.cxx:1027)
==23312== by 0x67EB212: SigHandler(ESignals) (TUnixSystem.cxx:351)
==23312== by 0x67E1C12: sighandler(int) (TUnixSystem.cxx:3290)
==23312== by 0x35E2E0E53F: (within /lib64/libpthread-2.7.so)
==23312== by 0x70CBAE2: G__getfunction (v6_func.cxx:2517)
==23312== by 0x71A8CEA: G__getstructmem (v6_var.cxx:6611)
==23312==
==23312== Use of uninitialised value of size 8
==23312== at 0x35E2E05D7E: __reclaim_stacks (in /lib64/libpthread-2.7.so)
==23312== by 0x35E229AE4E: fork (in /lib64/libc-2.7.so)
==23312== by 0x35E226357C: _IO_proc_open@@GLIBC_2.2.5 (in /lib64/libc-2.7.so)
==23312== by 0x35E22637E8: popen@@GLIBC_2.2.5 (in /lib64/libc-2.7.so)
==23312== by 0x67E7E44: TUnixSystem::OpenPipe(char const*, char const*) (TUnixSystem.cxx:1887)
==23312== by 0x67E800C: TUnixSystem::StackTrace() (TUnixSystem.cxx:2041)
==23312== by 0x67EB0EE: TUnixSystem::DispatchSignals(ESignals) (TUnixSystem.cxx:1027)
==23312== by 0x67EB212: SigHandler(ESignals) (TUnixSystem.cxx:351)
==23312== by 0x67E1C12: sighandler(int) (TUnixSystem.cxx:3290)
==23312== by 0x35E2E0E53F: (within /lib64/libpthread-2.7.so)
==23312== by 0x70CBAE2: G__getfunction (v6_func.cxx:2517)
==23312== by 0x71A8CEA: G__getstructmem (v6_var.cxx:6611)
==23312==
==23312== Invalid write of size 4
==23312== at 0x35E2E05D7E: __reclaim_stacks (in /lib64/libpthread-2.7.so)
==23312== by 0x35E229AE4E: fork (in /lib64/libc-2.7.so)
==23312== by 0x35E226357C: _IO_proc_open@@GLIBC_2.2.5 (in /lib64/libc-2.7.so)
==23312== by 0x35E22637E8: popen@@GLIBC_2.2.5 (in /lib64/libc-2.7.so)
==23312== by 0x67E7E44: TUnixSystem::OpenPipe(char const*, char const*) (TUnixSystem.cxx:1887)
==23312== by 0x67E800C: TUnixSystem::StackTrace() (TUnixSystem.cxx:2041)
==23312== by 0x67EB0EE: TUnixSystem::DispatchSignals(ESignals) (TUnixSystem.cxx:1027)
==23312== by 0x67EB212: SigHandler(ESignals) (TUnixSystem.cxx:351)
==23312== by 0x67E1C12: sighandler(int) (TUnixSystem.cxx:3290)
==23312== by 0x35E2E0E53F: (within /lib64/libpthread-2.7.so)
==23312== by 0x70CBAE2: G__getfunction (v6_func.cxx:2517)
==23312== by 0x71A8CEA: G__getstructmem (v6_var.cxx:6611)
==23312== Address 0x10 is not stack’d, malloc’d or (recently) free’d
==23312==
==23312== Process terminating with default action of signal 11 (SIGSEGV)
==23312== Access not within mapped region at address 0x10
==23312== at 0x35E2E05D7E: __reclaim_stacks (in /lib64/libpthread-2.7.so)
==23312== by 0x35E229AE4E: fork (in /lib64/libc-2.7.so)
==23312== by 0x35E226357C: _IO_proc_open@@GLIBC_2.2.5 (in /lib64/libc-2.7.so)
==23312== by 0x35E22637E8: popen@@GLIBC_2.2.5 (in /lib64/libc-2.7.so)
==23312== by 0x67E7E44: TUnixSystem::OpenPipe(char const*, char const*) (TUnixSystem.cxx:1887)
==23312== by 0x67E800C: TUnixSystem::StackTrace() (TUnixSystem.cxx:2041)
==23312== by 0x67EB0EE: TUnixSystem::DispatchSignals(ESignals) (TUnixSystem.cxx:1027)
==23312== by 0x67EB212: SigHandler(ESignals) (TUnixSystem.cxx:351)
==23312== by 0x67E1C12: sighandler(int) (TUnixSystem.cxx:3290)
==23312== by 0x35E2E0E53F: (within /lib64/libpthread-2.7.so)
==23312== by 0x70CBAE2: G__getfunction (v6_func.cxx:2517)
==23312== by 0x71A8CEA: G__getstructmem (v6_var.cxx:6611)
==23312==
==23312== Conditional jump or move depends on uninitialised value(s)
==23312== at 0x35E2E05C06: __free_stack_cache (in /lib64/libpthread-2.7.so)
==23312== by 0x35E230BDC9: __libc_freeres (in /lib64/libc-2.7.so)
==23312== by 0x4802344: _vgnU_freeres (vg_preloaded.c:60)
==23312==
==23312== ERROR SUMMARY: 6 errors from 6 contexts (suppressed: 59 from 1)
==23312== malloc/free: in use at exit: 12,084,491 bytes in 43,720 blocks.
==23312== malloc/free: 239,105 allocs, 195,385 frees, 26,197,023 bytes allocated.
==23312== For counts of detected errors, rerun with: -v
==23312== searching for pointers to 43,720 not-freed blocks.
==23312== checked 12,452,544 bytes.
==23312==
==23312== LEAK SUMMARY:
==23312== definitely lost: 937 bytes in 9 blocks.
==23312== possibly lost: 306,256 bytes in 5,279 blocks.
==23312== still reachable: 11,777,298 bytes in 38,432 blocks.
==23312== suppressed: 0 bytes in 0 blocks.
==23312== Rerun with --leak-check=full to see details of leaked memory.
Using host libthread_db library “/lib64/libthread_db.so.1”.
Attaching to program: /proc/23307/exe, process 23307
vgModuleLocal_do_syscall_for_client_WRK ()
at m_syswrap/syscall-amd64-linux.S:145
145 m_syswrap/syscall-amd64-linux.S: No such file or directory.
in m_syswrap/syscall-amd64-linux.S
The program is running. Quit anyway (and detach it)? (y or n) [answered Y; input not from terminal]
Detaching from program: /proc/23307/exe, process 23307
==23307==
==23307== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 59 from 1)
==23307== malloc/free: in use at exit: 11,462,532 bytes in 33,383 blocks.
==23307== malloc/free: 239,160 allocs, 205,777 frees, 26,200,130 bytes allocated.
==23307== For counts of detected errors, rerun with: -v
==23307== searching for pointers to 33,383 not-freed blocks.
==23307== checked 11,921,768 bytes.
==23307==
==23307== LEAK SUMMARY:
==23307== definitely lost: 954 bytes in 10 blocks.
==23307== possibly lost: 82,275 bytes in 1,666 blocks.
==23307== still reachable: 11,379,303 bytes in 31,707 blocks.
==23307== suppressed: 0 bytes in 0 blocks.
==23307== Rerun with --leak-check=full to see details of leaked memory.

Thanks -
Paul

Hi,

The line [quote]cint/src/v6_ifunc.cxx:4764[/quote] is actually the start of the implementation of the function being called.

This lead me to believe that the problem is actually a process limitation. Either the stack depth or the stack size is being limited to a number too low.
(See the shell command limit or ulimit)

Cheers,
Philippe.

Ran ‘ulimit -s unlimited’, still get the same result.

A seg fault on the first line of the function which is receiving null parameters, and that it sometimes seg faults on other lines that aren’t doing anything memory-related, suggests memory corruption to me. The seg fault is intermittent. Sometimes the ROOT API calls succeed and then the seg fault occurs later when the thread where RootReader was created is deallocated.

Maybe dynamic loading of the ROOT libs is not happening correctly. The MySQL shared lib is loaded at runtime using dlopen().

[quote]Maybe dynamic loading of the ROOT libs is not happening correctly. The MySQL shared lib is loaded at runtime using dlopen().[/quote]This should be fine.

[quote]A seg fault on the first line of the function which is receiving null parameters[/quote]Note that the line in question is the ‘declaration’ of the function itself, i.e. before the execution of anything in the routine. In this case the parameter ‘variable’ might not have been moved from the stack yet.

[quote]The seg fault is intermittent. Sometimes the ROOT API calls succeed and then the seg fault occurs later when the thread where RootReader was created is deallocated. [/quote]humm … Ok … next thing to try (since valgrind was somewhat unhelpful in this case) is to attach a debugger so that you can examine the cause of the crash (i.e. are the variable really zero?, etc.)

Cheers,
Philippe.

PS. Alternatively if you provide me with a complete running example, I will try it out (and/or give me access to your server).

Yes, I have debug builds of ROOT and Mysql, am running mysqld in gdb and stepping through the ROOT Cint source where the seg fault occurs. Not seeing an obvious problem yet, although I’m unfamiliar with the code.

Thanks for offering. Hands-on testing isn’t feasible at the moment since this is development code running on my workstation, and building it requires a fair amount of work.

  • Paul

Hi,

Were you able to get to one of the crash in gdb? What was the line number? What was the assembly code at that point?

Philippe.

PS. It might be more pratical to continue this debugging session either via IM or mail.