Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 2decf22

Browse files
Fix for issue9662, patch by Łukasz Langa in issue5504.
1 parent 713f2aa commit 2decf22

4 files changed

Lines changed: 10 additions & 3 deletions

File tree

Modules/_ctypes/callbacks.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -416,9 +416,13 @@ CThunkObject *_ctypes_alloc_callback(PyObject *callable,
416416
"ffi_prep_cif failed with %d", result);
417417
goto error;
418418
}
419+
#if defined(X86_DARWIN) || defined(POWERPC_DARWIN)
420+
result = ffi_prep_closure(p->pcl_write, &p->cif, closure_fcn, p);
421+
#else
419422
result = ffi_prep_closure_loc(p->pcl_write, &p->cif, closure_fcn,
420423
p,
421424
p->pcl_exec);
425+
#endif
422426
if (result != FFI_OK) {
423427
PyErr_Format(PyExc_RuntimeError,
424428
"ffi_prep_closure failed with %d", result);

Modules/_ctypes/libffi_osx/include/ffi.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,9 @@ ffi_prep_closure(
264264
void (*fun)(ffi_cif*,void*,void**,void*),
265265
void* user_data);
266266

267+
void ffi_closure_free(void *);
268+
void *ffi_closure_alloc (size_t size, void **code);
269+
267270
typedef struct ffi_raw_closure {
268271
char tramp[FFI_TRAMPOLINE_SIZE];
269272
ffi_cif* cif;
@@ -349,4 +352,4 @@ ffi_call(
349352
}
350353
#endif
351354

352-
#endif // #ifndef LIBFFI_H
355+
#endif // #ifndef LIBFFI_H

Modules/_ctypes/malloc_closure.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,6 @@ void *ffi_closure_alloc(size_t ignored, void** codeloc)
106106
return NULL;
107107
item = free_list;
108108
free_list = item->next;
109-
*codeloc = (void *)item;
109+
*codeloc = (void *)item;
110110
return (void *)item;
111111
}
112-

setup.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1657,6 +1657,7 @@ def detect_ctypes(self, inc_dirs, lib_dirs):
16571657
depends = ['_ctypes/ctypes.h']
16581658

16591659
if sys.platform == 'darwin':
1660+
sources.append('_ctypes/malloc_closure.c')
16601661
sources.append('_ctypes/darwin/dlfcn_simple.c')
16611662
extra_compile_args.append('-DMACOSX')
16621663
include_dirs.append('_ctypes/darwin')

0 commit comments

Comments
 (0)