]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-44133: Skip PyThread_get_thread_native_id() if not available (GH-30636)
authorVictor Stinner <vstinner@python.org>
Mon, 17 Jan 2022 13:49:20 +0000 (14:49 +0100)
committerGitHub <noreply@github.com>
Mon, 17 Jan 2022 13:49:20 +0000 (14:49 +0100)
test_capi.test_export_symbols() doesn't check if Python exports the
"PyThread_get_thread_native_id" symbol if the _thread.get_native_id()
function is not available (if the PY_HAVE_THREAD_NATIVE_ID macro is
not defined).

Lib/test/test_capi.py

index 9f217852ec529f36946cc64ad368f872ef288639..7ada8406a3584966065036210e57b2074e4f54d3 100644 (file)
@@ -2,6 +2,7 @@
 # these are all functions _testcapi exports whose name begins with 'test_'.
 
 from collections import OrderedDict
+import _thread
 import importlib.machinery
 import importlib.util
 import os
@@ -648,7 +649,11 @@ class CAPITest(unittest.TestCase):
         # "PyThread_get_thread_native_id" symbols are exported by the Python
         # (directly by the binary, or via by the Python dynamic library).
         ctypes = import_helper.import_module('ctypes')
-        names = ['PyThread_get_thread_native_id']
+        names = []
+
+        # Test if the PY_HAVE_THREAD_NATIVE_ID macro is defined
+        if hasattr(_thread, 'get_native_id'):
+            names.append('PyThread_get_thread_native_id')
 
         # Python/frozenmain.c fails to build on Windows when the symbols are
         # missing:
@@ -657,6 +662,7 @@ class CAPITest(unittest.TestCase):
         # - PyInitFrozenExtensions
         if os.name != 'nt':
             names.append('Py_FrozenMain')
+
         for name in names:
             with self.subTest(name=name):
                 self.assertTrue(hasattr(ctypes.pythonapi, name))