cpython/Include
Miss Islington (bot) bfd9c3ea53
[3.13] gh-119213: Be More Careful About _PyArg_Parser.kwtuple Across Interpreters (gh-119331) (gh-119410)
_PyArg_Parser holds static global data generated for modules by Argument Clinic.  The _PyArg_Parser.kwtuple field is a tuple object, even though it's stored within a static global.  In some cases the tuple is statically allocated and thus it's okay that it gets shared by multiple interpreters.  However, in other cases the tuple is set lazily, allocated from the heap using the active interprepreter at the point the tuple is needed.

This is a problem once that interpreter is destroyed since _PyArg_Parser.kwtuple becomes at dangling pointer, leading to crashes.  It isn't a problem if the tuple is allocated under the main interpreter, since its lifetime is bound to the lifetime of the runtime.  The solution here is to temporarily switch to the main interpreter.  The alternative would be to always statically allocate the tuple.

This change also fixes a bug where only the most recent parser was added to the global linked list.

(cherry picked from commit 81865002ae)

Co-authored-by: Eric Snow <ericsnowcurrently@gmail.com>
2024-05-22 12:09:48 -06:00
..
cpython [3.13] gh-118789: Restore hidden _PyWeakref_ClearRef (GH-118797) (GH-118903) 2024-05-10 14:20:22 +00:00
internal [3.13] gh-119213: Be More Careful About _PyArg_Parser.kwtuple Across Interpreters (gh-119331) (gh-119410) 2024-05-22 12:09:48 -06:00
abstract.h
bltinmodule.h
boolobject.h gh-115754: Add Py_GetConstant() function (#116883) 2024-03-21 16:07:00 +00:00
bytearrayobject.h
bytesobject.h
ceval.h gh-74929: Implement PEP 667 (GH-115153) 2024-05-04 12:12:10 +01:00
codecs.h
compile.h
complexobject.h
datetime.h
descrobject.h
dictobject.h
dynamic_annotations.h
enumobject.h
errcode.h
exports.h
fileobject.h
fileutils.h
floatobject.h
frameobject.h
genericaliasobject.h
import.h
intrcheck.h
iterobject.h
listobject.h gh-114329: Fix PyList_GetItemRef() limited C API definition (#117520) 2024-04-03 21:02:42 +00:00
longobject.h gh-117021: Fix integer overflow in PyLong_AsPid() on non-Windows 64-bit platforms (GH-117064) 2024-03-20 15:39:53 +02:00
marshal.h
memoryobject.h
methodobject.h gh-114626: Add again _PyCFunctionFastWithKeywords name (GH-115561) 2024-02-19 13:20:46 +01:00
modsupport.h
moduleobject.h gh-116322: Rename PyModule_ExperimentalSetGIL to PyUnstable_Module_SetGIL (GH-118645) 2024-05-06 18:59:36 +02:00
monitoring.h gh-111997: C-API for signalling monitoring events (#116413) 2024-05-04 08:23:50 +00:00
object.h gh-117657: Fix race data race in _Py_IsOwnedByCurrentThread() (#118258) 2024-04-26 10:39:08 -04:00
objimpl.h
opcode.h
opcode_ids.h GH-118095: Use broader specializations of CALL in tier 1, for better tier 2 support of calls. (GH-118322) 2024-05-04 12:11:11 +01:00
osdefs.h
osmodule.h
patchlevel.h Post 3.13.0b1 2024-05-08 16:53:50 +02:00
py_curses.h gh-109617: fix ncurses incompatibility on macOS with Xcode 15 (#111258) 2024-05-04 23:41:47 +02:00
pyatomic.h
pybuffer.h
pycapsule.h
pydtrace.d
pydtrace.h
pyerrors.h
pyexpat.h gh-115398: Revert PyExpat_CAPI_MAGIC version bump (GH-116411) 2024-03-06 09:55:07 -08:00
pyframe.h
pyhash.h
pylifecycle.h gh-117987: Restore several functions removed in Python 3.13 alpha 1 (GH-117993) 2024-04-18 15:20:38 +02:00
pymacconfig.h
pymacro.h gh-118124: Use static_assert() in Py_BUILD_ASSERT() on C11 (#118398) 2024-04-30 22:29:48 +02:00
pymath.h
pymem.h
pyport.h gh-112536: Define _Py_THREAD_SANITIZER on GCC when TSan is enabled (#117702) 2024-04-10 10:20:05 -04:00
pystate.h
pystats.h
pystrcmp.h
pystrtod.h
Python.h gh-111997: C-API for signalling monitoring events (#116413) 2024-05-04 08:23:50 +00:00
pythonrun.h
pythread.h
pytypedefs.h
rangeobject.h
README.rst
setobject.h
sliceobject.h gh-115754: Add Py_GetConstant() function (#116883) 2024-03-21 16:07:00 +00:00
structmember.h
structseq.h
sysmodule.h gh-117987: Restore several functions removed in Python 3.13 alpha 1 (GH-117993) 2024-04-18 15:20:38 +02:00
traceback.h
tupleobject.h
typeslots.h
unicodeobject.h
warnings.h
weakrefobject.h gh-105927: Limit PyWeakref_GetRef() to limited C API 3.13 (#117091) 2024-03-20 23:52:23 +01:00

The Python C API
================

The C API is divided into these sections:

1. ``Include/``: Limited API
2. ``Include/cpython/``: CPython implementation details
3. ``Include/cpython/``, names with the ``PyUnstable_`` prefix: API that can
   change between minor releases
4. ``Include/internal/``, and any name with ``_`` prefix: The internal API

Information on changing the C API is available `in the developer guide`_

.. _in the developer guide: https://devguide.python.org/c-api/