]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Allow local use of `static PyMutex` in the C analyzer (#127102)
authorPeter Bierma <zintensitydev@gmail.com>
Fri, 22 Nov 2024 07:48:39 +0000 (02:48 -0500)
committerGitHub <noreply@github.com>
Fri, 22 Nov 2024 07:48:39 +0000 (08:48 +0100)
Tools/c-analyzer/cpython/_analyzer.py
Tools/c-analyzer/cpython/ignored.tsv

index f07fa8af495e17bfb4eecab4a3a80de6dc75c4d8..6204353e9bd26a21452fcdf738a7e695a1476733 100644 (file)
@@ -280,12 +280,26 @@ def _is_kwlist(decl):
     vartype = ''.join(str(decl.vartype).split())
     return vartype == 'char*[]'
 
+def _is_local_static_mutex(decl):
+    if not hasattr(decl, "vartype"):
+        return False
+
+    if not hasattr(decl, "parent") or decl.parent is None:
+        # We only want to allow local variables
+        return False
+
+    vartype = decl.vartype
+    return (vartype.typespec == 'PyMutex') and (decl.storage == 'static')
 
 def _has_other_supported_type(decl):
     if hasattr(decl, 'file') and decl.file.filename.endswith('.c.h'):
         assert 'clinic' in decl.file.filename, (decl,)
         if decl.name == '_kwtuple':
             return True
+    if _is_local_static_mutex(decl):
+        # GH-127081: Local static mutexes are used to
+        # wrap libc functions that aren't thread safe
+        return True
     vartype = str(decl.vartype).split()
     if vartype[0] == 'struct':
         vartype = vartype[1:]
index 4327a111eedbaf9072ff9941bee9ee2fda8048e3..686f3935d91bdabe5ccb20f855361b90dcfb50f8 100644 (file)
@@ -739,7 +739,6 @@ Modules/expat/xmlrole.c     -       declClose       -
 Modules/expat/xmlrole.c        -       error   -
 
 ## other
-Modules/grpmodule.c    grp_getgrall_impl       getgrall_mutex  -
 Modules/_io/_iomodule.c        -       _PyIO_Module    -
 Modules/_sqlite/module.c       -       _sqlite3module  -
 Modules/clinic/md5module.c.h   _md5_md5        _keywords       -