New submission from Eli Rykoff <eryk...@stanford.edu>:
Building python 3.9.1 on Apple Silicon compiled against a external (non-os-provided) libffi makes the following code return a MemoryError: Test: import ctypes @ctypes.CFUNCTYPE(None, ctypes.c_int, ctypes.c_char_p) def error_handler(fif, message): pass I have tracked this down to the following code in malloc_closure.c: #if USING_APPLE_OS_LIBFFI && HAVE_FFI_CLOSURE_ALLOC if (__builtin_available(macos 10.15, ios 13, watchos 6, tvos 13, *)) { ffi_closure_free(p); return; } #endif and #if USING_APPLE_OS_LIBFFI && HAVE_FFI_CLOSURE_ALLOC if (__builtin_available(macos 10.15, ios 13, watchos 6, tvos 13, *)) { return ffi_closure_alloc(size, codeloc); } #endif In fact, while the __builtin_available() call should be guarded by USING_APPLE_OS_LIBFFI, the call to ffi_closure_alloc() should only be guarded by HAVE_FFI_CLOSURE_ALLOC, as this is set as the result of an independent check in setup.py and should be used with external libffi when supported. The following code does work instead: #if HAVE_FFI_CLOSURE_ALLOC #if USING_APPLE_OS_LIBFFI if (__builtin_available(macos 10.15, ios 13, watchos 6, tvos 13, *)) { #endif ffi_closure_free(p); return; #if USING_APPLE_OS_LIBFFI } #endif #endif #if HAVE_FFI_CLOSURE_ALLOC #if USING_APPLE_OS_LIBFFI if (__builtin_available(macos 10.15, ios 13, watchos 6, tvos 13, *)) { #endif return ffi_closure_alloc(size, codeloc); return; #if USING_APPLE_OS_LIBFFI } #endif #endif ---------- components: ctypes messages: 383419 nosy: erykoff priority: normal severity: normal status: open title: ctypes memory error on Apple Silicon with external libffi type: behavior versions: Python 3.9 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue42688> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com