summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorda-woods <dw-git@d-woods.co.uk>2022-07-28 22:10:59 +0100
committerGitHub <noreply@github.com>2022-07-28 23:10:59 +0200
commit67c44be9dd01a7a5bdde8df928f0cd4139570e0e (patch)
treeb1d05460dd69d1bc1e98e9fb10162cbaaa020921
parent1f71962268c7fa4d0361b38b172e7376fa904a61 (diff)
downloadcython-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.pyx4
-rw-r--r--Cython/Utility/MemoryView_C.c3
-rw-r--r--tests/memoryview/memslice.pyx6
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)