Skip to content

Commit

Permalink
Allow local use of static PyMutex in the C analyzer (#127102)
Browse files Browse the repository at this point in the history
  • Loading branch information
ZeroIntensity authored Nov 22, 2024
1 parent 8c98ed8 commit 89125e9
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 1 deletion.
14 changes: 14 additions & 0 deletions Tools/c-analyzer/cpython/_analyzer.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:]
Expand Down
1 change: 0 additions & 1 deletion Tools/c-analyzer/cpython/ignored.tsv
Original file line number Diff line number Diff line change
Expand Up @@ -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 -
Expand Down

0 comments on commit 89125e9

Please sign in to comment.