From bullard at berkeley.edu  Fri Dec  9 20:18:55 2005
From: bullard at berkeley.edu (James Bullard)
Date: Fri, 09 Dec 2005 11:18:55 -0800
Subject: [Rd] segfault following a detach
Message-ID: <4399D89F.7050806@berkeley.edu>

Hello, first off, thanks for all of the previous help; hopefully someone 
will have some insight on this question. I am attempting to track down a 
segmentation fault which occurs only after a detach(2) is called in the 
code (I have replaced the detach(2) with detach(package:DSA) and that 
fails as well (furthermore, I have removed the detach calls and it does 
not segfault)). It has proved difficult to track down (at least for me) 
because it does not happen when the call is made, detach returns and 
then some seconds (~ 30 seconds - 1 minute) later a segmentation fault 
occurrs. I have run it in the debugger and the backtrace is below. When 
I step through the code of do_detach it does not appear to be happening 
at any consistent location. I assume this means that some worker thread 
is involved, but the bactrace is not helpful (at least to me).

1.) Can I improve the backtrace message after the segfault to increase 
message potential.
2.) Can I set some breakpoints elsewhere which might be more instructive 
as I do not see much going on in do_detach? suggestions?

The library I am working with is in C and uses Nag, it uses the 
registration facilities, although I have the problem when I do not use 
the registration facilities. Specifically, I have defined the method: 
void R_init_DSA(DllInfo *info). However, as I said if I comment this out 
it appears to behave identically.

Also, I have run the whole test case using valgrind to see if I could 
track down the problem there (I assume I am trashing some of R's memory) 
however, the only messages I get from valgrind are below - all related 
to the registration code. It does not appear to seg fault when I run it 
in valgrind, but I have no idea why this would be the case as I am 
*very* new to valgrind.

I am a little out of my league here so any help would be greatly 
appreciated. OS and R version information is below. Thanks as always for 
all of the help.

thanks, jim

 > R.version
             
platform i686-pc-linux-gnu
arch     i686            
os       linux-gnu       
system   i686, linux-gnu 
status                   
major    2               
minor    2.0             
year     2005            
month    10              
day      06              
svn rev  35749           
language R               


(gdb) backtrace
#0  0xb71655d0 in ?? ()
#1  0x0872fc70 in ?? ()
#2  0x0872fc58 in ?? ()
#3  0xb69b7ab8 in ?? ()
#4  0xb71654d5 in ?? ()
#5  0x00000000 in ?? ()
#6  0x00000000 in ?? ()
#7  0x4399ca09 in ?? ()
#8  0x00000000 in ?? ()
#9  0x00000000 in ?? ()
#10 0x00000000 in ?? ()
#11 0x0872fc18 in ?? ()
#12 0x08ee0fe0 in ?? ()
#13 0x00000000 in ?? ()
#14 0xb69c5c30 in __JCR_LIST__ () from /lib/tls/i686/cmov/libpthread.so.0
#15 0xb69b7b4c in ?? ()
#16 0xb69bcae0 in start_thread () from /lib/tls/i686/cmov/libpthread.so.0
#17 0xb69bcae0 in start_thread () from /lib/tls/i686/cmov/libpthread.so.0
#18 0xb7d09c9a in clone () from /lib/tls/i686/cmov/libc.so.6

-------------------------------------------------------------------------------------------------------------------------------------------
------------------------- valgrind output, after detach(.) is called 
---------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------------------
==20262== Conditional jump or move depends on uninitialised value(s)
==20262==    at 0x1B92D888: R_getDLLRegisteredSymbol (Rdynload.c:665)
==20262==    by 0x1B92D9C5: R_dlsym (Rdynload.c:735)
==20262==    by 0x1B92D0BD: R_callDLLUnload (Rdynload.c:412)
==20262==    by 0x1B92D15B: DeleteDLL (Rdynload.c:439)
==20262==
==20262== Conditional jump or move depends on uninitialised value(s)
==20262==    at 0x1B92D8D2: R_getDLLRegisteredSymbol (Rdynload.c:681)
==20262==    by 0x1B92D9C5: R_dlsym (Rdynload.c:735)
==20262==    by 0x1B92D0BD: R_callDLLUnload (Rdynload.c:412)
==20262==    by 0x1B92D15B: DeleteDLL (Rdynload.c:439)
==20262==
==20262== Conditional jump or move depends on uninitialised value(s)
==20262==    at 0x1B92D8D7: R_getDLLRegisteredSymbol (Rdynload.c:681)
==20262==    by 0x1B92D9C5: R_dlsym (Rdynload.c:735)
==20262==    by 0x1B92D0BD: R_callDLLUnload (Rdynload.c:412)
==20262==    by 0x1B92D15B: DeleteDLL (Rdynload.c:439)
==20262==
==20262== Conditional jump or move depends on uninitialised value(s)
==20262==    at 0x1B92D8DB: R_getDLLRegisteredSymbol (Rdynload.c:696)
==20262==    by 0x1B92D9C5: R_dlsym (Rdynload.c:735)
==20262==    by 0x1B92D0BD: R_callDLLUnload (Rdynload.c:412)
==20262==    by 0x1B92D15B: DeleteDLL (Rdynload.c:439)
==20262==
==20262== Conditional jump or move depends on uninitialised value(s)
==20262==    at 0x1B92D8E0: R_getDLLRegisteredSymbol (Rdynload.c:696)
==20262==    by 0x1B92D9C5: R_dlsym (Rdynload.c:735)
==20262==    by 0x1B92D0BD: R_callDLLUnload (Rdynload.c:412)
==20262==    by 0x1B92D15B: DeleteDLL (Rdynload.c:439)
==20262==
==20262== Conditional jump or move depends on uninitialised value(s)
==20262==    at 0x1B92D8E4: R_getDLLRegisteredSymbol (Rdynload.c:711)
==20262==    by 0x1B92D9C5: R_dlsym (Rdynload.c:735)
==20262==    by 0x1B92D0BD: R_callDLLUnload (Rdynload.c:412)
==20262==    by 0x1B92D15B: DeleteDLL (Rdynload.c:439)
==20262==
==20262== Conditional jump or move depends on uninitialised value(s)
==20262==    at 0x1B92D8E9: R_getDLLRegisteredSymbol (Rdynload.c:711)
==20262==    by 0x1B92D9C5: R_dlsym (Rdynload.c:735)
==20262==    by 0x1B92D0BD: R_callDLLUnload (Rdynload.c:412)
==20262==    by 0x1B92D15B: DeleteDLL (Rdynload.c:439)
==20262==
==20262== Conditional jump or move depends on uninitialised value(s)
==20262==    at 0x1B92DA11: R_dlsym (Rdynload.c:749)
==20262==    by 0x1B92D0BD: R_callDLLUnload (Rdynload.c:412)
==20262==    by 0x1B92D15B: DeleteDLL (Rdynload.c:439)
==20262==    by 0x1B92DD94: do_dynunload (Rdynload.c:863)



[Rd] segfault following a detach
James Bullard