Commit 9dc4e927 authored by Ronald Oussoren's avatar Ronald Oussoren

Fix for issue9662, patch by Łukasz Langa in issue5504.

parent 35161d59
...@@ -416,9 +416,13 @@ CThunkObject *_ctypes_alloc_callback(PyObject *callable, ...@@ -416,9 +416,13 @@ CThunkObject *_ctypes_alloc_callback(PyObject *callable,
"ffi_prep_cif failed with %d", result); "ffi_prep_cif failed with %d", result);
goto error; goto error;
} }
#if defined(X86_DARWIN) || defined(POWERPC_DARWIN)
result = ffi_prep_closure(p->pcl_write, &p->cif, closure_fcn, p);
#else
result = ffi_prep_closure_loc(p->pcl_write, &p->cif, closure_fcn, result = ffi_prep_closure_loc(p->pcl_write, &p->cif, closure_fcn,
p, p,
p->pcl_exec); p->pcl_exec);
#endif
if (result != FFI_OK) { if (result != FFI_OK) {
PyErr_Format(PyExc_RuntimeError, PyErr_Format(PyExc_RuntimeError,
"ffi_prep_closure failed with %d", result); "ffi_prep_closure failed with %d", result);
......
...@@ -264,6 +264,9 @@ ffi_prep_closure( ...@@ -264,6 +264,9 @@ ffi_prep_closure(
void (*fun)(ffi_cif*,void*,void**,void*), void (*fun)(ffi_cif*,void*,void**,void*),
void* user_data); void* user_data);
void ffi_closure_free(void *);
void *ffi_closure_alloc (size_t size, void **code);
typedef struct ffi_raw_closure { typedef struct ffi_raw_closure {
char tramp[FFI_TRAMPOLINE_SIZE]; char tramp[FFI_TRAMPOLINE_SIZE];
ffi_cif* cif; ffi_cif* cif;
......
...@@ -109,4 +109,3 @@ void *ffi_closure_alloc(size_t ignored, void** codeloc) ...@@ -109,4 +109,3 @@ void *ffi_closure_alloc(size_t ignored, void** codeloc)
*codeloc = (void *)item; *codeloc = (void *)item;
return (void *)item; return (void *)item;
} }
...@@ -1657,6 +1657,7 @@ class PyBuildExt(build_ext): ...@@ -1657,6 +1657,7 @@ class PyBuildExt(build_ext):
depends = ['_ctypes/ctypes.h'] depends = ['_ctypes/ctypes.h']
if sys.platform == 'darwin': if sys.platform == 'darwin':
sources.append('_ctypes/malloc_closure.c')
sources.append('_ctypes/darwin/dlfcn_simple.c') sources.append('_ctypes/darwin/dlfcn_simple.c')
extra_compile_args.append('-DMACOSX') extra_compile_args.append('-DMACOSX')
include_dirs.append('_ctypes/darwin') include_dirs.append('_ctypes/darwin')
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment