[Rd] segfault following a detach

From: James Bullard <bullard_at_berkeley.edu>
Date: Fri 09 Dec 2005 - 19:18:55 GMT


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)


R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Sat Dec 10 06:33:21 2005

This archive was generated by hypermail 2.1.8 : Mon 20 Feb 2006 - 03:21:34 GMT