cpython/Include/internal
Pieter Eendebak 7e38e6745d
gh-123271: Make builtin zip method safe under free-threading (#123272)
The `zip_next` function uses a common optimization technique for methods
that generate tuples. The iterator maintains an internal reference to
the returned tuple. When the method is called again, it checks if the
internal tuple's reference count is 1. If so, the tuple can be reused.
However, this approach is not safe under the free-threading build:
after checking the reference count, another thread may perform the same
check and also reuse the tuple. This can result in a double decref on
the items of the replaced tuple and a double incref (memory leak) on
the items of the tuple being set.

This adds a function, `_PyObject_IsUniquelyReferenced` that
encapsulates the stricter logic necessary for the free-threaded build:
the internal tuple must be owned by the current thread, have a local
refcount of one, and a shared refcount of zero.
2024-08-27 15:22:43 -04:00
..
mimalloc gh-121487: Fix deprecation warning for ATOMIC_VAR_INIT in mimalloc (gh-121488) 2024-07-08 14:32:30 -04:00
pycore_abstract.h
pycore_asdl.h
pycore_ast.h gh-116126: Implement PEP 696 (#116129) 2024-05-03 06:17:32 -07:00
pycore_ast_state.h gh-116126: Implement PEP 696 (#116129) 2024-05-03 06:17:32 -07:00
pycore_atexit.h gh-76785: Rename _xxsubinterpreters to _interpreters (gh-117791) 2024-04-24 16:18:24 +00:00
pycore_backoff.h GH-116017: Get rid of _COLD_EXITs (GH-120960) 2024-07-01 13:17:40 -07:00
pycore_bitutils.h
pycore_blocks_output_buffer.h
pycore_brc.h gh-110481: Implement inter-thread queue for biased reference counting (#114824) 2024-02-09 17:08:32 -05:00
pycore_bytes_methods.h gh-117431: Adapt bytes and bytearray .find() and friends to Argument Clinic (#117502) 2024-04-12 07:40:55 +00:00
pycore_bytesobject.h gh-121489: Export private _PyBytes_Join() again (#122267) 2024-07-25 17:31:30 +02:00
pycore_call.h gh-120686: remove unused internal c api functions (#120687) 2024-06-27 11:09:30 +01:00
pycore_capsule.h
pycore_cell.h gh-117323: Make cell thread-safe in free-threaded builds (#117330) 2024-03-29 13:35:43 -04:00
pycore_ceval.h GH-117224: Move the body of a few large-ish micro-ops into helper functions (GH-122601) 2024-08-02 16:31:17 +01:00
pycore_ceval_state.h gh-118518: Allow perf to work without frame pointers (#112254) 2024-05-05 03:07:29 +02:00
pycore_code.h GH-123197: Only count an instruction as deferred if it hasn't deopted first. (GH-123222) 2024-08-22 14:17:10 +01:00
pycore_codecs.h gh-116738: Make _codecs module thread-safe (#117530) 2024-05-02 18:25:36 -04:00
pycore_compile.h gh-121554: remove unnecessary internal functions in compile.c (#121555) 2024-07-10 23:48:37 +01:00
pycore_complexobject.h gh-112026: Restore removed private C API (#112115) 2023-11-15 16:38:31 +00:00
pycore_condvar.h gh-104530: Enable native Win32 condition variables by default (GH-104531) 2024-02-02 13:50:51 +00:00
pycore_context.h gh-100240: Use a consistent implementation for freelists (#121934) 2024-07-22 12:08:27 -04:00
pycore_critical_section.h gh-119344: Make critical section API public (#119353) 2024-06-21 15:50:18 -04:00
pycore_crossinterp.h gh-76785: Handle Legacy Interpreters Properly (gh-117490) 2024-04-11 23:23:25 +00:00
pycore_descrobject.h
pycore_dict.h GH-115775: Use __static_attributes__ to initialize shared keys (GH-118468) 2024-08-27 10:34:46 +01:00
pycore_dict_state.h GH-113710: Add a "globals to constants" pass (GH-114592) 2024-02-02 12:14:34 +00:00
pycore_dtoa.h gh-119447: Fix build with _PY_SHORT_FLOAT_REPR == 0 (#121178) 2024-06-30 11:40:40 +02:00
pycore_emscripten_signal.h
pycore_emscripten_trampoline.h
pycore_exceptions.h
pycore_faulthandler.h
pycore_fileutils.h gh-118422: Fix run_fileexflags() test (#118429) 2024-04-30 22:32:55 +02:00
pycore_fileutils_windows.h
pycore_floatobject.h gh-100240: Use a consistent implementation for freelists (#121934) 2024-07-22 12:08:27 -04:00
pycore_flowgraph.h gh-119744: move a few functions from compile.c to flowgraph.c (#119745) 2024-05-30 21:55:06 +01:00
pycore_format.h
pycore_frame.h GH-118093: Make CALL_ALLOC_AND_ENTER_INIT suitable for tier 2. (GH-123140) 2024-08-20 16:52:58 +01:00
pycore_freelist.h gh-100240: Use a consistent implementation for freelists (#121934) 2024-07-22 12:08:27 -04:00
pycore_freelist_state.h Fix typos in docs, error messages and comments (#122502) 2024-08-01 00:26:09 +00:00
pycore_function.h gh-117657: Disable the function/code cache in free-threaded builds (#118301) 2024-05-03 16:21:04 -04:00
pycore_gc.h gh-117139: Garbage collector support for deferred refcounting (#122956) 2024-08-15 16:09:11 +00:00
pycore_genobject.h gh-120834: fix type of *_iframe field in _PyGenObject_HEAD declaration (#120835) 2024-06-24 10:23:38 +01:00
pycore_getopt.h
pycore_gil.h gh-116322: Enable the GIL while loading C extension modules (#118560) 2024-05-06 23:07:23 -04:00
pycore_global_objects.h gh-119180: Add evaluate functions for type params and type aliases (#122212) 2024-07-27 17:24:10 +00:00
pycore_global_objects_fini_generated.h gh-121621: Move asyncio running loop to thread state (GH-121695) 2024-07-17 01:09:58 +08:00
pycore_global_strings.h gh-121621: Move asyncio running loop to thread state (GH-121695) 2024-07-17 01:09:58 +08:00
pycore_hamt.h
pycore_hashtable.h
pycore_import.h gh-117657: Fix TSAN race involving import lock (#118523) 2024-06-06 13:40:58 -04:00
pycore_importdl.h gh-122907: Fix Builds Without HAVE_DYNAMIC_LOADING Set (gh-122952) 2024-08-13 14:44:57 -06:00
pycore_initconfig.h Fix typos in comments (#120188) 2024-06-07 10:19:41 +02:00
pycore_instruction_sequence.h gh-117901: Add option for compiler's codegen to save nested instruction sequences for introspection (#118007) 2024-04-24 09:46:17 +00:00
pycore_instruments.h Fix typos in comments (#120188) 2024-06-07 10:19:41 +02:00
pycore_interp.h gh-122417: Implement per-thread heap type refcounts (#122418) 2024-08-06 14:36:57 -04:00
pycore_intrinsics.h gh-116126: Implement PEP 696 (#116129) 2024-05-03 06:17:32 -07:00
pycore_jit.h gh-117139: Convert the evaluation stack to stack refs (#118450) 2024-06-27 03:10:43 +08:00
pycore_list.h gh-117139: Replace _PyList_FromArraySteal with stack ref variant (#122830) 2024-08-12 14:49:49 -04:00
pycore_llist.h gh-111964: Implement stop-the-world pauses (gh-112471) 2024-01-23 11:08:23 -07:00
pycore_lock.h gh-121368: Fix seq lock memory ordering in _PyType_Lookup (#121388) 2024-07-08 14:52:07 -04:00
pycore_long.h gh-120593: Fix const qualifier in _PyLong_CompactValue() (#121053) 2024-06-26 20:11:21 +02:00
pycore_magic_number.h GH-118093: Specialize CALL_KW (GH-123006) 2024-08-16 17:11:24 +01:00
pycore_memoryobject.h
pycore_mimalloc.h gh-122584: Import mimalloc headers in a C++ context (#122587) 2024-08-15 09:01:01 -04:00
pycore_modsupport.h gh-112136: Restore removed _PyArg_Parser (#121262) 2024-07-03 18:36:57 +02:00
pycore_moduleobject.h gh-116322: Add Py_mod_gil module slot (#116882) 2024-05-03 11:30:55 -04:00
pycore_namespace.h
pycore_object.h gh-123271: Make builtin zip method safe under free-threading (#123272) 2024-08-27 15:22:43 -04:00
pycore_object_alloc.h gh-112529: Use GC heaps for GC allocations in free-threaded builds (gh-114157) 2024-01-21 01:14:45 +09:00
pycore_object_deferred.h gh-117139: Convert the evaluation stack to stack refs (#118450) 2024-06-27 03:10:43 +08:00
pycore_object_stack.h gh-100240: Use a consistent implementation for freelists (#121934) 2024-07-22 12:08:27 -04:00
pycore_object_state.h gh-100240: Use a consistent implementation for freelists (#121934) 2024-07-22 12:08:27 -04:00
pycore_obmalloc.h gh-113055: Use pointer for interp->obmalloc state (gh-113412) 2024-01-26 19:38:14 -08:00
pycore_obmalloc_init.h gh-113055: Use pointer for interp->obmalloc state (gh-113412) 2024-01-26 19:38:14 -08:00
pycore_opcode_metadata.h GH-123040: Specialize shadowed LOAD_ATTR. (GH-123219) 2024-08-23 10:22:35 +01:00
pycore_opcode_utils.h gh-119180: PEP 649 compiler changes (#119361) 2024-06-11 13:06:49 +00:00
pycore_optimizer.h GH-118093: Handle some polymorphism before requiring progress in tier two (GH-122843) 2024-08-12 12:39:31 -07:00
pycore_parking_lot.h gh-110850: Cleanup pycore_time.h includes (#115724) 2024-02-20 16:50:43 +00:00
pycore_parser.h gh-122581: Avoid data races when collecting parser statistics (#122694) 2024-08-06 13:29:57 +02:00
pycore_pathconfig.h
pycore_pyarena.h
pycore_pyatomic_ft_wrappers.h gh-117657: Make PyType_HasFeature atomic (GH-120210) 2024-06-13 17:29:19 +08:00
pycore_pybuffer.h gh-76785: Rename _xxsubinterpreters to _interpreters (gh-117791) 2024-04-24 16:18:24 +00:00
pycore_pyerrors.h gh-122163: Add notes for JSON serialization errors (GH-122165) 2024-07-23 20:02:54 +03:00
pycore_pyhash.h gh-111545: Add Py_HashPointer() function (#112096) 2023-12-06 15:09:22 +01:00
pycore_pylifecycle.h Remove more remnants of deepfreeze (#118159) 2024-04-22 12:17:57 -07:00
pycore_pymath.h
pycore_pymem.h gh-112075: Support freeing object memory via QSBR (#116344) 2024-03-08 09:56:36 -08:00
pycore_pymem_init.h gh-115103: Implement delayed free mechanism for free-threaded builds (#115367) 2024-02-20 13:04:37 -05:00
pycore_pystate.h gh-100240: Use a consistent implementation for freelists (#121934) 2024-07-22 12:08:27 -04:00
pycore_pystats.h
pycore_pythonrun.h
pycore_pythread.h Fix typos in comments (#120188) 2024-06-07 10:19:41 +02:00
pycore_qsbr.h gh-117657: Fix QSBR race condition (#118843) 2024-05-10 10:26:35 -04:00
pycore_range.h
pycore_runtime.h Add debug offsets for free threaded builds (#123041) 2024-08-15 18:42:41 +00:00
pycore_runtime_init.h Add debug offsets for free threaded builds (#123041) 2024-08-15 18:42:41 +00:00
pycore_runtime_init_generated.h gh-121621: Move asyncio running loop to thread state (GH-121695) 2024-07-17 01:09:58 +08:00
pycore_semaphore.h gh-110850: Cleanup pycore_time.h includes (#115724) 2024-02-20 16:50:43 +00:00
pycore_setobject.h gh-118527: Intern code consts in free-threaded build (#118667) 2024-05-06 20:12:39 -04:00
pycore_signal.h
pycore_sliceobject.h GH-115802: JIT "small" code for Windows (GH-115964) 2024-02-29 08:11:28 -08:00
pycore_stackref.h gh-117376: Make Py_DECREF a macro in ceval.c in free-threaded build (#122975) 2024-08-23 15:36:14 -04:00
pycore_strhex.h
pycore_structseq.h
pycore_symtable.h gh-122985: add SYMBOL_TO_SCOPE macro in symtable (#122986) 2024-08-14 06:17:04 +01:00
pycore_sysmodule.h
pycore_time.h gh-121905: Consistently use "floating-point" instead of "floating point" (GH-121907) 2024-07-19 08:06:02 +00:00
pycore_token.h
pycore_traceback.h
pycore_tracemalloc.h
pycore_tstate.h gh-122417: Implement per-thread heap type refcounts (#122418) 2024-08-06 14:36:57 -04:00
pycore_tuple.h gh-117139: Add _PyTuple_FromStackRefSteal and use it (#121244) 2024-07-02 12:30:14 -04:00
pycore_typeid.h gh-122417: Implement per-thread heap type refcounts (#122418) 2024-08-06 14:36:57 -04:00
pycore_typeobject.h gh-117482: Make the Slot Wrapper Inheritance Tests Much More Thorough (gh-122867) 2024-08-12 19:19:33 +00:00
pycore_typevarobject.h gh-119180: Add evaluate functions for type params and type aliases (#122212) 2024-07-27 17:24:10 +00:00
pycore_ucnhash.h gh-111972: Make Unicode name C APIcapsule initialization thread-safe (#112249) 2023-11-30 11:12:49 +01:00
pycore_unicodeobject.h gh-120686: remove unused internal c api functions (#120687) 2024-06-27 11:09:30 +01:00
pycore_unicodeobject_generated.h gh-121621: Move asyncio running loop to thread state (GH-121695) 2024-07-17 01:09:58 +08:00
pycore_unionobject.h gh-105858: Expose some union-related objects as internal APIs (GH-116025) 2024-02-28 09:56:40 +00:00
pycore_uop_ids.h GH-123232: Factor BINARY_SLICE and STORE_SLICE to handle stats properly for tier 2. (GH-123381) 2024-08-27 10:49:39 +01:00
pycore_uop_metadata.h GH-123185: Check for NULL after calling _PyEvalFramePushAndInit (GH-123194) 2024-08-21 12:44:56 +01:00
pycore_warnings.h gh-117511: Make PyMutex public in the non-limited API (#117731) 2024-06-20 11:29:08 -04:00
pycore_weakref.h gh-118789: Add PyUnstable_Object_ClearWeakRefsNoCallbacks (#118807) 2024-06-18 09:57:23 -04:00