Segmentation Fault on CDLL reloading

Diez B. Roggisch deets at nospam.web.de
Sat Aug 30 08:38:08 EDT 2008


Marcus.CM schrieb:
> Hi,
> 
> I use the following ctype to load a .so library in Linux.
> 
> vr = ctypes.CDLL(sstr)     
> And the following to release it so that i can reload the library without 
> quiting the python script.
> 
> _ctypes.dlclose(vr._handle)
> 
> These calls are guarded by a writer lock and access to it guarded by a 
> reader lock which i got from recipe : 
> 
>           The problem is during the re-loading of the library 
> occasionally the python script will abort with "Segmentation Fault". 
> This is like 1 out of 10 times it can happen and that
> is good enough to kill the application.
> 
> Is there any reason to this or how to do i prevent it?

Short answer: yes, there is a reason, no, you can't prevent it.

Of course there is a reason for this. Segfaults don't happen by 
chance... And one can't prevent segfaults from killing the interpreter, 
because the OS is responsible for that.

Now what would I do?

  - don't care. Or does the DLL frequently change when the program is 
deployed? Or to ask different: why do you need unloading/reloading at all?

  - debug it. Write a script that exposes the behavior. The fire up GDB 
with python, do "set args <myscript>" and run. When the segfault occurs, 
look into the traceback with "bt". If the problem is in the DLL-code, 
see what's causing it. If it's in ctypes (or the python-interpreter) - 
well, there is a ctypes mailing lisk to ask for help.

Diez



More information about the Python-list mailing list