cpython/Python
Sam Gross 052cb717f5
gh-124878: Fix race conditions during interpreter finalization (#130649)
The PyThreadState field gains a reference count field to avoid
issues with PyThreadState being a dangling pointer to freed memory.
The refcount starts with a value of two: one reference is owned by the
interpreter's linked list of thread states and one reference is owned by
the OS thread. The reference count is decremented when the thread state
is removed from the interpreter's linked list and before the OS thread
calls `PyThread_hang_thread()`. The thread that decrements it to zero
frees the `PyThreadState` memory.

The `holds_gil` field is moved out of the `_status` bit field, to avoid
a data race where on thread calls `PyThreadState_Clear()`, modifying the
`_status` bit field while the OS thread reads `holds_gil` when
attempting to acquire the GIL.

The `PyThreadState.state` field now has `_Py_THREAD_SHUTTING_DOWN` as a
possible value. This corresponds to the `_PyThreadState_MustExit()`
check. This avoids race conditions in the free threading build when
checking `_PyThreadState_MustExit()`.
2025-03-06 10:38:34 -05:00
..
clinic gh-129889: Support context manager protocol by contextvars.Token (#129888) 2025-02-12 12:32:58 +01:00
frozen_modules gh-97669: Create Tools/build/ directory (#97963) 2022-10-17 12:01:00 +02:00
_warnings.c gh-130163: Fix crashes related to PySys_GetObject() (GH-130503) 2025-02-25 23:04:27 +02:00
asdl.c bpo-43244: Remove ast.h, asdl.h, Python-ast.h headers (GH-24933) 2021-03-23 20:47:40 +01:00
asm_trampoline.S gh-120400 :Support Linux perf profile to see Python calls on RISC-V architecture (#120089) 2024-06-12 14:24:46 +01:00
assemble.c docs: internal notes have moved, correct references (#130762) 2025-03-03 06:38:49 -05:00
ast.c GH-130396: Use computed stack limits on linux (GH-130398) 2025-02-25 09:24:48 +00:00
ast_opt.c GH-130396: Use computed stack limits on linux (GH-130398) 2025-02-25 09:24:48 +00:00
ast_unparse.c gh-119182: Use public PyUnicodeWriter in ast_unparse.c (#129208) 2025-01-23 01:44:43 +01:00
bltinmodule.c gh-130163: Fix crashes related to PySys_GetObject() (GH-130503) 2025-02-25 23:04:27 +02:00
bootstrap_hash.c gh-121199: Use _Py__has_attribute() in timemodule.c (#121203) 2024-07-01 08:49:33 +00:00
brc.c Fix typos in documentation and comments (#119763) 2024-06-04 10:22:22 +00:00
bytecodes.c GH-130296: Avoid stack transients in four instructions. (GH-130310) 2025-02-28 18:00:38 +00:00
ceval.c gh-130163: Fix crashes related to PySys_GetObject() (GH-130503) 2025-02-25 23:04:27 +02:00
ceval_gil.c gh-124878: Fix race conditions during interpreter finalization (#130649) 2025-03-06 10:38:34 -05:00
ceval_macros.h gh-129989: Properly disable tailcall interp in configure (GH-129991) 2025-02-16 03:01:24 +08:00
codecs.c gh-130790: Remove references about unicode's readiness from comments (#130801) 2025-03-03 19:18:09 +00:00
codegen.c gh-130740: Move some stdbool.h includes after Python.h (#130738) 2025-03-02 09:56:49 +00:00
compile.c Postpone <stdbool.h> inclusion after Python.h (#130641) 2025-02-28 10:09:27 +01:00
condvar.h gh-104530: Enable native Win32 condition variables by default (GH-104531) 2024-02-02 13:50:51 +00:00
config_common.h gh-76785: Add PyInterpreterConfig Helpers (gh-117170) 2024-04-02 20:35:52 +00:00
context.c gh-129889: Support context manager protocol by contextvars.Token (#129888) 2025-02-12 12:32:58 +01:00
critical_section.c gh-114203: Optimise simple recursive critical sections (#128126) 2024-12-23 13:31:33 +01:00
crossinterp.c gh-128911: Use PyImport_ImportModuleAttr() function (#129657) 2025-02-05 11:03:58 +01:00
crossinterp_data_lookup.h gh-76785: Improved Subinterpreters Compatibility with 3.12 (2/2) (gh-126707) 2024-11-12 10:41:51 -07:00
crossinterp_exceptions.h gh-76785: Minor Cleanup of Exception-related Cross-interpreter State (gh-126602) 2024-11-11 14:49:41 -07:00
dtoa.c gh-121040: Use __attribute__((fallthrough)) (#121044) 2024-06-27 09:58:44 +00:00
dup2.c gh-108765: Python.h no longer includes <unistd.h> (#108783) 2023-09-02 16:50:18 +02:00
dynamic_annotations.c
dynload_hpux.c gh-88402: Add new sysconfig variables on Windows (GH-110049) 2023-10-04 22:50:29 +00:00
dynload_shlib.c gh-88402: Add new sysconfig variables on Windows (GH-110049) 2023-10-04 22:50:29 +00:00
dynload_stub.c gh-88402: Add new sysconfig variables on Windows (GH-110049) 2023-10-04 22:50:29 +00:00
dynload_win.c gh-88402: Add new sysconfig variables on Windows (GH-110049) 2023-10-04 22:50:29 +00:00
emscripten_signal.c GH-108614: Unbreak emscripten build (GH-109132) 2023-09-08 17:54:45 +01:00
emscripten_trampoline.c gh-128627: Skip wasm-gc on iOS Safari where it's broken (#130418) 2025-02-24 07:26:04 +08:00
errors.c gh-130163: Fix crashes related to PySys_GetObject() (GH-130503) 2025-02-25 23:04:27 +02:00
executor_cases.c.h gh-118331: Fix a couple of issues when list allocation fails (#130811) 2025-03-05 10:42:09 -08:00
fileutils.c gh-128863: Deprecate private C API functions (#128864) 2025-01-22 11:04:19 +00:00
flowgraph.c gh-130740: Move some stdbool.h includes after Python.h (#130738) 2025-03-02 09:56:49 +00:00
formatter_unicode.c gh-130860: Fix width calculation, when separators in fractional part (GH-130865) 2025-03-06 14:26:29 +02:00
frame.c GH-128563: Add new frame owner type for interpreter entry frames (GH-129078) 2025-01-21 10:15:02 +00:00
frozen.c GH-89435: os.path should not be a frozen module (#126924) 2024-11-22 18:50:30 +00:00
frozenmain.c gh-105716: Fix _PyInterpreterState_IsRunningMain() For Embedders (gh-117140) 2024-03-21 18:20:20 -06:00
future.c gh-126139: Improve error message location for future statement with unknown feature (#126140) 2024-10-29 23:57:59 +00:00
gc.c gh-130019: Fix data race in _PyType_AllocNoTrack (gh-130058) 2025-02-13 11:50:45 -05:00
gc_free_threading.c gh-130019: Fix data race in _PyType_AllocNoTrack (gh-130058) 2025-02-13 11:50:45 -05:00
gc_gil.c gh-100240: Use a consistent implementation for freelists (#121934) 2024-07-22 12:08:27 -04:00
generated_cases.c.h gh-118331: Fix a couple of issues when list allocation fails (#130811) 2025-03-05 10:42:09 -08:00
getargs.c gh-122943: Add the varpos parameter in _PyArg_UnpackKeywords (GH-126564) 2024-11-08 14:23:50 +02:00
getcompiler.c closes bpo-43278: remove unnecessary leading '\n' from COMPILER when build with GCC/Clang (GH-24606) 2021-02-25 20:24:21 -08:00
getcopyright.c gh-126133: Only use start year in PSF copyright, remove end years (#126236) 2024-11-12 15:59:19 +02:00
getopt.c Make the Python CLI error message style more consistent (GH-128129) 2025-01-11 11:17:35 +02:00
getplatform.c
getversion.c gh-119132: Update sys.version to identify free-threaded or not. (gh-119134) 2024-05-18 19:44:40 +00:00
hamt.c gh-111178: fix UBSan failures in Python/hamt.c (GH-128247) 2025-01-08 14:50:40 +01:00
hashtable.c gh-111545: Add Py_HashPointer() function (#112096) 2023-12-06 15:09:22 +01:00
import.c gh-130163: Fix crashes related to PySys_GetObject() (GH-130503) 2025-02-25 23:04:27 +02:00
importdl.c gh-122907: Fix Builds Without HAVE_DYNAMIC_LOADING Set (gh-122952) 2024-08-13 14:44:57 -06:00
index_pool.c gh-130740: Move some stdbool.h includes after Python.h (#130738) 2025-03-02 09:56:49 +00:00
initconfig.c gh-130163: Fix crashes related to PySys_GetObject() (GH-130503) 2025-02-25 23:04:27 +02:00
instruction_sequence.c gh-130740: Move some stdbool.h includes after Python.h (#130738) 2025-03-02 09:56:49 +00:00
instrumentation.c GH-128534: Instrument branches for async for loops. (GH-130569) 2025-02-27 09:36:41 +00:00
interpconfig.c gh-76785: Fix a Refleak in _interpreters.new_config() (gh-117491) 2024-04-03 01:10:26 +00:00
intrinsics.c gh-130163: Fix crashes related to PySys_GetObject() (GH-130503) 2025-02-25 23:04:27 +02:00
jit.c GH-129231: Group executable JIT code in memory (GH-129232) 2025-02-02 15:19:55 -08:00
legacy_tracing.c gh-128360: Add _Py_AssertHoldsTstate as assertion for holding a thread state (#128361) 2025-01-20 17:04:35 +05:30
lock.c gh-125139: use _PyRecursiveMutex in _thread.RLock (#125144) 2024-10-14 14:06:31 +05:30
marshal.c gh-127936, PEP 757: Convert marshal module to use import/export API for ints (#128530) 2025-01-23 02:54:23 +00:00
modsupport.c bpo-45325: Add a new 'p' parameter to Py_BuildValue to convert an integer into a Python bool (#28634) 2025-02-18 17:14:11 +00:00
mysnprintf.c Add a warning message about PyOS_snprintf (#95993) 2022-10-07 11:49:53 -07:00
mystrtoul.c gh-108765: Python.h no longer includes <ctype.h> (#108831) 2023-09-03 18:54:27 +02:00
object_stack.c gh-100240: Use a consistent implementation for freelists (#121934) 2024-07-22 12:08:27 -04:00
opcode_targets.h gh-130574: renumber RESUME opcode from 149 to 128 (GH-130685) 2025-03-06 08:59:36 +00:00
optimizer.c GH-130296: Avoid stack transients in four instructions. (GH-130310) 2025-02-28 18:00:38 +00:00
optimizer_analysis.c GH-130415: Use boolean guards to narrow types to values in the JIT (GH-130659) 2025-03-02 13:21:34 -08:00
optimizer_bytecodes.c GH-130903: typo in optimizer DSL for _GUARD_BOTH_UNICODE (#130904) 2025-03-06 12:11:08 +01:00
optimizer_cases.c.h GH-130903: typo in optimizer DSL for _GUARD_BOTH_UNICODE (#130904) 2025-03-06 12:11:08 +01:00
optimizer_symbols.c GH-130415: Narrow str to "" based on boolean tests (GH-130476) 2025-03-04 13:20:17 -08:00
parking_lot.c gh-76785: Improved Subinterpreters Compatibility with 3.12 (1/2) (gh-126704) 2024-11-11 15:58:46 -07:00
pathconfig.c gh-111924: Fix data races when swapping allocators (gh-130287) 2025-02-20 11:31:15 -05:00
perf_jit_trampoline.c GH-118844: Fix build failures when combining --disable-gil with --enable-experimental-jit (GH-118935) 2024-05-11 16:19:31 -07:00
perf_trampoline.c gh-115999: Enable specialization of CALL instructions in free-threaded builds (#127123) 2024-12-03 11:20:20 -08:00
preconfig.c gh-106320: Remove private pylifecycle.h functions (#106400) 2023-07-04 09:41:43 +00:00
pyarena.c Chore: Fix typo in pyarena.c (#126527) 2024-11-07 16:37:41 +01:00
pyctype.c
pyfpe.c bpo-46315: Add ifdef HAVE_ feature checks for WASI compatibility (GH-30507) 2022-01-13 09:46:04 +01:00
pyhash.c gh-122854: Add Py_HashBuffer() function (#122855) 2024-08-30 15:42:27 +00:00
pylifecycle.c gh-124878: Fix race conditions during interpreter finalization (#130649) 2025-03-06 10:38:34 -05:00
pymath.c bpo-45440: Remove pymath.c fallbacks (GH-28977) 2021-10-15 19:45:34 +02:00
pystate.c gh-124878: Fix race conditions during interpreter finalization (#130649) 2025-03-06 10:38:34 -05:00
pystrcmp.c gh-108767: Replace ctype.h functions with pyctype.h functions (#108772) 2023-09-01 18:36:53 +02:00
pystrhex.c gh-108765: pystrhex: Replace stdlib.h abs() with Py_ABS() (#108830) 2023-09-02 23:15:54 +02:00
pystrtod.c gh-120026: soft deprecate Py_HUGE_VAL macro (#120027) 2024-11-01 22:04:31 +00:00
Python-ast.c GH-130396: Use computed stack limits on linux (GH-130398) 2025-02-25 09:24:48 +00:00
Python-tokenize.c gh-115754: Use Py_GetConstant(Py_CONSTANT_EMPTY_STR) (#125194) 2024-10-09 17:15:23 +02:00
pythonrun.c Postpone <stdbool.h> inclusion after Python.h (#130641) 2025-02-28 10:09:27 +01:00
pytime.c gh-130421: Fix data race on timebase initialization (gh-130592) 2025-02-27 13:27:54 +00:00
qsbr.c gh-124878: Fix race conditions during interpreter finalization (#130649) 2025-03-06 10:38:34 -05:00
README
specialize.c gh-100239: replace BINARY_SUBSCR & family by BINARY_OP with oparg NB_SUBSCR (#129700) 2025-02-07 22:39:54 +00:00
stackrefs.c GH-127705: better double free message. (GH-130785) 2025-03-05 14:00:42 +00:00
stdlib_module_names.h gh-126925: Modify how iOS test results are gathered (#127592) 2024-12-09 13:28:57 +08:00
structmember.c gh-117657: TSAN Fix races in PyMember_Get and PyMember_Set for C extensions (GH-123211) 2024-12-03 09:41:53 -05:00
suggestions.c Fixes loop variables to be the same types as their limit (GH-120958) 2024-06-24 17:11:47 +01:00
symtable.c gh-111178: Fix function signatures in symtable.c (#130589) 2025-02-26 21:35:24 +01:00
sysmodule.c gh-130163: Fix crashes related to PySys_GetObject() (GH-130503) 2025-02-25 23:04:27 +02:00
thread.c gh-110850: Cleanup PyTime API: PyTime_t are nanoseconds (#115753) 2024-02-21 11:46:00 +01:00
thread_nt.h gh-87135: Hang non-main threads that attempt to acquire the GIL during finalization (GH-105805) 2024-10-02 09:17:49 -07:00
thread_pthread.h gh-87135: Hang non-main threads that attempt to acquire the GIL during finalization (GH-105805) 2024-10-02 09:17:49 -07:00
thread_pthread_stubs.h gh-125161: return non zero value in pthread_self on wasi (#125303) 2024-10-13 20:59:41 +05:30
tier2_engine.md Docs: fix spelling of the word 'transferring' (#116641) 2024-03-13 23:53:32 +01:00
traceback.c gh-130163: Fix crashes related to PySys_GetObject() (GH-130503) 2025-02-25 23:04:27 +02:00
tracemalloc.c gh-130790: Remove references about unicode's readiness from comments (#130801) 2025-03-03 19:18:09 +00:00
uniqueid.c gh-128923: Use zero to indicate unassigned unique id (#128925) 2025-01-17 16:42:27 +01:00
vm-state.md Fix typos in documentation and comments (#119763) 2024-06-04 10:22:22 +00:00

Miscellaneous source files for the main Python shared library