mirror of
https://github.com/python/cpython.git
synced 2025-09-02 06:57:58 +00:00
Allow local use of static PyMutex
in the C analyzer (#127102)
This commit is contained in:
parent
8c98ed846a
commit
89125e9f9f
2 changed files with 14 additions and 1 deletions
|
@ -280,12 +280,26 @@ def _is_kwlist(decl):
|
||||||
vartype = ''.join(str(decl.vartype).split())
|
vartype = ''.join(str(decl.vartype).split())
|
||||||
return vartype == 'char*[]'
|
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):
|
def _has_other_supported_type(decl):
|
||||||
if hasattr(decl, 'file') and decl.file.filename.endswith('.c.h'):
|
if hasattr(decl, 'file') and decl.file.filename.endswith('.c.h'):
|
||||||
assert 'clinic' in decl.file.filename, (decl,)
|
assert 'clinic' in decl.file.filename, (decl,)
|
||||||
if decl.name == '_kwtuple':
|
if decl.name == '_kwtuple':
|
||||||
return True
|
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()
|
vartype = str(decl.vartype).split()
|
||||||
if vartype[0] == 'struct':
|
if vartype[0] == 'struct':
|
||||||
vartype = vartype[1:]
|
vartype = vartype[1:]
|
||||||
|
|
|
@ -739,7 +739,6 @@ Modules/expat/xmlrole.c - declClose -
|
||||||
Modules/expat/xmlrole.c - error -
|
Modules/expat/xmlrole.c - error -
|
||||||
|
|
||||||
## other
|
## other
|
||||||
Modules/grpmodule.c grp_getgrall_impl getgrall_mutex -
|
|
||||||
Modules/_io/_iomodule.c - _PyIO_Module -
|
Modules/_io/_iomodule.c - _PyIO_Module -
|
||||||
Modules/_sqlite/module.c - _sqlite3module -
|
Modules/_sqlite/module.c - _sqlite3module -
|
||||||
Modules/clinic/md5module.c.h _md5_md5 _keywords -
|
Modules/clinic/md5module.c.h _md5_md5 _keywords -
|
||||||
|
|
Can't render this file because it has a wrong number of fields in line 4.
|
Loading…
Add table
Add a link
Reference in a new issue