diff options
author | da-woods <dw-git@d-woods.co.uk> | 2022-07-28 22:10:59 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-28 23:10:59 +0200 |
commit | 67c44be9dd01a7a5bdde8df928f0cd4139570e0e (patch) | |
tree | b1d05460dd69d1bc1e98e9fb10162cbaaa020921 | |
parent | 1f71962268c7fa4d0361b38b172e7376fa904a61 (diff) | |
download | cython-67c44be9dd01a7a5bdde8df928f0cd4139570e0e.tar.gz |
Fix error where "import *" tried to overwrite a macro in utility code (GH-4930)
Closes https://github.com/cython/cython/issues/4927
-rw-r--r-- | Cython/Utility/MemoryView.pyx | 4 | ||||
-rw-r--r-- | Cython/Utility/MemoryView_C.c | 3 | ||||
-rw-r--r-- | tests/memoryview/memslice.pyx | 6 |
3 files changed, 11 insertions, 2 deletions
diff --git a/Cython/Utility/MemoryView.pyx b/Cython/Utility/MemoryView.pyx index 8fa3c926a..277c0bd87 100644 --- a/Cython/Utility/MemoryView.pyx +++ b/Cython/Utility/MemoryView.pyx @@ -23,7 +23,7 @@ cdef extern from "<string.h>": void *memset(void *b, int c, size_t len) cdef extern from *: - bint CYTHON_ATOMICS + bint __PYX_CYTHON_ATOMICS_ENABLED() noexcept int __Pyx_GetBuffer(object, Py_buffer *, int) except -1 void __Pyx_ReleaseBuffer(Py_buffer *) @@ -352,7 +352,7 @@ cdef class memoryview(object): (<__pyx_buffer *> &self.view).obj = Py_None Py_INCREF(Py_None) - if not CYTHON_ATOMICS: + if not __PYX_CYTHON_ATOMICS_ENABLED(): global __pyx_memoryview_thread_locks_used if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] diff --git a/Cython/Utility/MemoryView_C.c b/Cython/Utility/MemoryView_C.c index 34664f062..1b78b2a4e 100644 --- a/Cython/Utility/MemoryView_C.c +++ b/Cython/Utility/MemoryView_C.c @@ -24,6 +24,9 @@ typedef struct { #ifndef CYTHON_ATOMICS #define CYTHON_ATOMICS 1 #endif +// using CYTHON_ATOMICS as a cdef extern bint in the Cython memoryview code +// interacts badly with "import *". Therefore, define a helper function-like macro +#define __PYX_CYTHON_ATOMICS_ENABLED() CYTHON_ATOMICS #define __pyx_atomic_int_type int diff --git a/tests/memoryview/memslice.pyx b/tests/memoryview/memslice.pyx index ccf760c21..3a5943aa3 100644 --- a/tests/memoryview/memslice.pyx +++ b/tests/memoryview/memslice.pyx @@ -21,6 +21,12 @@ if sys.version_info[0] < 3: else: import builtins +try: + from Cython.Tests.this_module_does_not_exist import * +except ImportError: + # Fails, but the existence of "import *" interacted badly with some utility code + pass + def testcase(func): @wraps(func) |