Skip to content

Avoid ctypes callbacks when listing libraries on Linux. - #242

Merged
ogrisel merged 7 commits into
joblib:masterfrom
ogrisel:225-avoid-ctypes-callbacks-linux
Sep 15, 2026
Merged

ogrisel merged 7 commits into
joblib:masterfrom
ogrisel:225-avoid-ctypes-callbacks-linux

Conversation

@ogrisel

@ogrisel ogrisel commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Workaround for #225 on some system:

Importing ctypes.util or using CFUNCTYPE with dl_iterate_phdr creates libffi closures that can abort after fork on some Linux libffi builds. Enumerate libraries from /proc/self/maps and load libc via CDLL(None).

Disclaimer: this PR was vibecoded although I did ask the agent to use a container to check that it actually workaround the problem on AlmaLinux 9.8 (Olive Jaguar) with libffi-3.4.2-8.el9.

Still, I find the extra complexity in threadpoolctl not justified. I would rather wait for upstream ctypes to fix the problem or wait for all impacted linux distributions to upgrade to a newer libffi.

Importing ctypes.util or using CFUNCTYPE with dl_iterate_phdr creates
libffi closures that can abort after fork on some Linux libffi builds.
Enumerate libraries from /proc/self/maps and load libc via CDLL(None).

Co-authored-by: Cursor <cursoragent@cursor.com>
ogrisel and others added 2 commits September 11, 2026 17:17
joblib#243 already lists libraries from /proc/self/maps. Keep that path and
only avoid importing ctypes.util (load libc via CDLL(None), lazy-import
dllist off Linux) so the libffi abort after fork from joblib#225 stays fixed.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Comment thread CHANGES.md Outdated
ogrisel and others added 4 commits September 14, 2026 10:29
Bind dllist to None on Linux instead of importing ctypes.util, so
_find_libraries_with_python can stay a void finder and the 3.14 branch
of _load_libraries does not have to use a boolean return as control flow.

Co-authored-by: Olivier Grisel <olivier.grisel@ensta.org>
Keep the finder a void helper by passing the imported dllist callable,
and still skip ctypes.util entirely on Linux and emscripten.

Co-authored-by: Olivier Grisel <olivier.grisel@ensta.org>
…allbacks-linux

Keep dllist imported in _load_libraries and pass it to
_find_libraries_with_python, while taking master's OSError warning when
dllist listing fails.

Co-authored-by: Olivier Grisel <olivier.grisel@ensta.org>
@ogrisel
ogrisel marked this pull request as ready for review September 15, 2026 13:57
@ogrisel

ogrisel commented Sep 15, 2026

Copy link
Copy Markdown
Contributor Author

I think the extra code complexity is fine, let's merge.

@ogrisel
ogrisel merged commit 318125e into joblib:master Sep 15, 2026
22 checks passed
@ogrisel
ogrisel deleted the 225-avoid-ctypes-callbacks-linux branch September 15, 2026 13:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants