]> granicus.if.org Git - python/commitdiff
Merged revisions 84535 via svnmerge from
authorRonald Oussoren <ronaldoussoren@mac.com>
Thu, 16 Sep 2010 11:35:07 +0000 (11:35 +0000)
committerRonald Oussoren <ronaldoussoren@mac.com>
Thu, 16 Sep 2010 11:35:07 +0000 (11:35 +0000)
svn+ssh://pythondev@svn.python.org/python/branches/py3k

........
  r84535 | ronald.oussoren | 2010-09-05 20:25:59 +0200 (Sun, 05 Sep 2010) | 2 lines

  Fix for issue9662, patch by Ćukasz Langa in issue5504.
........

Modules/_ctypes/callbacks.c
Modules/_ctypes/libffi_osx/include/ffi.h
Modules/_ctypes/malloc_closure.c
setup.py

index deedaa369d98682ce5243a01436993de7ae56fad..716a02fdaa72a4caf0d894210702826c8d82020b 100644 (file)
@@ -469,9 +469,13 @@ CThunkObject *_ctypes_alloc_callback(PyObject *callable,
                      "ffi_prep_cif failed with %d", result);
         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,
                                  p,
                                  p->pcl_exec);
+#endif
     if (result != FFI_OK) {
         PyErr_Format(PyExc_RuntimeError,
                      "ffi_prep_closure failed with %d", result);
index 3d39064350e9d4dc918a7f99cdf6a72dfe5684c1..c104a5c89350b657df7703f8a70c062a31d64561 100644 (file)
@@ -264,6 +264,9 @@ ffi_prep_closure(
        void                    (*fun)(ffi_cif*,void*,void**,void*),
        void*                   user_data);
 
+void ffi_closure_free(void *);
+void *ffi_closure_alloc (size_t size, void **code);
+
 typedef struct ffi_raw_closure {
        char            tramp[FFI_TRAMPOLINE_SIZE];
        ffi_cif*        cif;
@@ -349,4 +352,4 @@ ffi_call(
 }
 #endif
 
-#endif // #ifndef LIBFFI_H
\ No newline at end of file
+#endif // #ifndef LIBFFI_H
index d0a20b567eda2e0c0f1a5583773855f977668923..b98d43b6d050da35d142ac07cb029a2b34f3472b 100644 (file)
@@ -110,7 +110,6 @@ void *ffi_closure_alloc(size_t ignored, void** codeloc)
         return NULL;
     item = free_list;
     free_list = item->next;
-       *codeloc = (void *)item;
+    *codeloc = (void *)item;
     return (void *)item;
 }
-
index 0ed2baef6bad6094dbc48e7325841c93de6679b1..4f895595ce41ab745a042476534522be3bfbcd46 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -1875,6 +1875,7 @@ class PyBuildExt(build_ext):
         depends = ['_ctypes/ctypes.h']
 
         if sys.platform == 'darwin':
+            sources.append('_ctypes/malloc_closure.c')
             sources.append('_ctypes/darwin/dlfcn_simple.c')
             extra_compile_args.append('-DMACOSX')
             include_dirs.append('_ctypes/darwin')