You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
ctypes memory error on Apple Silicon with external libffi #86854
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.
Could you please sign the CLA? (See the PR for details on that)
The PR looks sane.
Out of interest: why do you use an external version of libffi? AFAIK the system copy of libffi contains some magic sauce to work nicer with signed binaries.
erykoff commented on Dec 20, 2020
erykoffmannequin
MannequinAuthor
More actions
Thanks for your quick feedback! I signed the CLA after submitting the PR, but I think it takes a bit of time to percolate through the system.
As for the "why", until 3.9.1 conda-forge had been successfully using an external ffi (with 3.9.0 + osx-arm64 patches) and then suddenly it broke. For the time being conda-forge is using the system ffi, which does have other advantages as well, having all the latest patches. However, I was curious as to _why_ it broke, and that led me to discover this bug, and it seemed straightforward to fix. When/if conda-forge will switch back to external ffi is TBD, but if that decision is made this issue (at least) will be taken care of.
New changeset 7e72997 by Miss Islington (bot) in branch '3.9': bpo-42688: Fix ffi alloc/free when using external libffi on macos (GH-23868) (GH-23888) 7e72997
Activity
erykoff commentedon Dec 20, 2020
Building python 3.9.1 on Apple Silicon compiled against a external (non-os-provided) libffi makes the following code return a MemoryError:
Test:
I have tracked this down to the following code in malloc_closure.c:
and
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:
ronaldoussoren commentedon Dec 20, 2020
Could you please sign the CLA? (See the PR for details on that)
The PR looks sane.
Out of interest: why do you use an external version of libffi? AFAIK the system copy of libffi contains some magic sauce to work nicer with signed binaries.
erykoff commentedon Dec 20, 2020
Thanks for your quick feedback! I signed the CLA after submitting the PR, but I think it takes a bit of time to percolate through the system.
As for the "why", until 3.9.1 conda-forge had been successfully using an external ffi (with 3.9.0 + osx-arm64 patches) and then suddenly it broke. For the time being conda-forge is using the system ffi, which does have other advantages as well, having all the latest patches. However, I was curious as to _why_ it broke, and that led me to discover this bug, and it seemed straightforward to fix. When/if conda-forge will switch back to external ffi is TBD, but if that decision is made this issue (at least) will be taken care of.
miss-islington commentedon Dec 22, 2020
New changeset b3c77ec by erykoff in branch 'master':
bpo-42688: Fix ffi alloc/free when using external libffi on macos (GH-23868)
b3c77ec
ned-deily commentedon Feb 1, 2021
New changeset 7e72997 by Miss Islington (bot) in branch '3.9':
bpo-42688: Fix ffi alloc/free when using external libffi on macos (GH-23868) (GH-23888)
7e72997
ambv commentedon May 2, 2021
New changeset b29d0a5 by Ned Deily in branch '3.8':
[3.8] bpo-41100: Support macOS 11 Big Sur and Apple Silicon Macs (bpo-25806)
b29d0a5