Segmentation Fault on CDLL reloading

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Marcus.CM

    Segmentation Fault on CDLL reloading

    Hi,

    I use the following ctype to load a .so library in Linux.

    vr = ctypes.CDLL(sst r)

    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 "Segmentati on 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?


    Marcus .CM




  • Diez B. Roggisch

    #2
    Re: Segmentation Fault on CDLL reloading

    Marcus.CM schrieb:
    Hi,
    >
    I use the following ctype to load a .so library in Linux.
    >
    vr = ctypes.CDLL(sst r)
    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 "Segmentati on 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

    Comment

    Working...