Title: dynload_shlib does not close ldl handles when the interpreter is shut down
Type: behavior Stage:
Components: Interpreter Core Versions: Python 2.7
Status: open Resolution:
Dependencies: Superseder:
Assigned To: Nosy List: Adam, Super Bo, eric.snow
Priority: normal Keywords: patch

Created on 2015-02-06 18:21 by Adam, last changed 2018-05-16 18:12 by eric.snow.

File name Uploaded Description Edit
python-dlopen.diff Adam, 2015-02-06 18:21 review
Messages (2)
msg235490 - (view) Author: Adam (Adam) Date: 2015-02-06 18:21
I think dynload_shlib (and maybe some of the other non-ldl dynamic library loaders?) should close the libraries when the interpreter is shut down. Currently the handles are not ever closed and in ldl's case sometimes leaked.

The reason I desire this behavior is I have Python opening a shared library that I also open (all within the same process), and I want to be able to reload the library at runtime (via dlclose() + dlopen()) by shutting down the Python interpreter, dlclose()/dlopen(), and re-starting Python on the other side, however having the hanging reference to the library within the interpreter is preventing my dlclose() call from unloading the library.

I have attached a patch for dynload_shlib.c that tracks all handles returned by dlopen() and will close them properly when the interpreter is shut down.
msg287380 - (view) Author: Super Bo (Super Bo) Date: 2017-02-09 03:19
I think  dynload_unload_all() should be called in PyImport_Cleanup() function.
Date User Action Args
2018-05-16 18:12:06eric.snowsetnosy: + eric.snow
2017-02-09 03:19:40Super Bosetnosy: + Super Bo
messages: + msg287380
2015-02-06 18:21:40Adamcreate