summaryrefslogtreecommitdiffstats
path: root/Python
Commit message (Collapse)AuthorAgeFilesLines
...
* gh-125842: Fix `sys.exit(0xffff_ffff)` on Windows (#125896)Sam Gross2024-10-241-33/+47
| | | | | | | | | | On Windows, `long` is a signed 32-bit integer so it can't represent `0xffff_ffff` without overflow. Windows exit codes are unsigned 32-bit integers, so if a child process exits with `-1`, it will be represented as `0xffff_ffff`. Also fix a number of other possible cases where `_Py_HandleSystemExit` could return with an exception set, leading to a `SystemError` (or fatal error in debug builds) later on during shutdown.
* gh-125859: Fix crash when `gc.get_objects` is called during GC (#125882)Sam Gross2024-10-241-73/+64
| | | | | | | | | This fixes a crash when `gc.get_objects()` or `gc.get_referrers()` is called during a GC in the free threading build. Switch to `_PyObjectStack` to avoid corrupting the `struct worklist` linked list maintained by the GC. Also, don't return objects that are frozen (`gc.freeze()`) or in the process of being collected to more closely match the behavior of the default build.
* GH-125868: Fix STORE_ATTR_WITH_HINT specialization (GH-125876)Mark Shannon2024-10-243-12/+12
|
* gh-125286: Share the Main Refchain With Legacy Interpreters (gh-125709)Eric Snow2024-10-232-4/+16
| | | | | They used to be shared, before 3.12. Returning to sharing them resolves a failure on Py_TRACE_REFS builds. Co-authored-by: Petr Viktorin <encukou@gmail.com>
* gh-125038: Fix crash after genexpr.gi_frame.f_locals manipulations (#125178)Mikhail Efimov2024-10-221-0/+1
|
* GH-125521: Remove `if (true)` from generated output to reduce C compiler ↵Mark Shannon2024-10-221-34/+34
| | | | warnings (GH-125700)
* gh-121459: Fix a couple of uses of `PyStackRef_FromPyObjectSteal` (#125711)mpage2024-10-213-12/+18
| | | | | | | | | | | * Fix usage of PyStackRef_FromPyObjectSteal in CALL_TUPLE_1 This was missed in gh-124894 * Fix usage of PyStackRef_FromPyObjectSteal in _CALL_STR_1 This was missed in gh-124894 * Regenerate code
* gh-124218: Use per-thread reference counting for globals and builtins (#125713)Sam Gross2024-10-211-3/+9
| | | | Use per-thread refcounting for the reference from function objects to the globals and builtins dictionaries.
* gh-125703: Correctly honour tracemalloc hooks on more PyDECREF specialized ↵Pablo Galindo Salgado2024-10-211-0/+5
| | | | paths (#125712)
* gh-125207: Fix MSVC 1935 build with JIT (#125209)Michael Droettboom2024-10-181-1/+1
| | | | | | | * gh-125207: Use {0} array initializers * Simplify, as suggested in PR * Revert change to explicitly specify length
* gh-125604: Move _Py_AuditHookEntry, etc. Out of pycore_runtime.h (gh-125605)Eric Snow2024-10-189-8/+15
| | | | | | | | | | | | This is essentially a cleanup, moving a handful of API declarations to the header files where they fit best, creating new ones when needed. We do the following: * add pycore_debug_offsets.h and move _Py_DebugOffsets, etc. there * inline struct _getargs_runtime_state and struct _gilstate_runtime_state in _PyRuntimeState * move struct _reftracer_runtime_state to the existing pycore_object_state.h * add pycore_audit.h and move to it _Py_AuditHookEntry , _PySys_Audit(), and _PySys_ClearAuditHooks * add audit.h and cpython/audit.h and move the existing audit-related API there *move the perfmap/trampoline API from cpython/sysmodule.h to cpython/ceval.h, and remove the now-empty cpython/sysmodule.h
* gh-125541: Make Ctrl-C interrupt `threading.Lock.acquire()` on Windows (#125546)Sam Gross2024-10-171-2/+15
|
* gh-123153: Fix PGO builds with free-threading on Windows (#125607)Michael Droettboom2024-10-171-6/+14
| | | | | * gh-123153: Fix PGO builds with free-threading * Redo how the #define works
* gh-125217: Turn off optimization around_PyEval_EvalFrameDefault to avoid ↵Michael Droettboom2024-10-161-0/+14
| | | | MSVC crash (#125477)
* gh-124872: Replace enter/exit events with "switched" (#125532)Kirill Podoprigora2024-10-161-10/+21
| | | | | | | | | | | | | | | | | | | | | | | | | Users want to know when the current context switches to a different context object. Right now this happens when and only when a context is entered or exited, so the enter and exit events are synonymous with "switched". However, if the changes proposed for gh-99633 are implemented, the current context will also switch for reasons other than context enter or exit. Since users actually care about context switches and not enter or exit, replace the enter and exit events with a single switched event. The former exit event was emitted just before exiting the context. The new switched event is emitted after the context is exited to match the semantics users expect of an event with a past-tense name. If users need the ability to clean up before the switch takes effect, another event type can be added in the future. It is not added here because YAGNI. I skipped 0 in the enum as a matter of practice. Skipping 0 makes it easier to troubleshoot when code forgets to set zeroed memory, and it aligns with best practices for other tools (e.g., https://protobuf.dev/programming-guides/dos-donts/#unspecified-enum). Co-authored-by: Richard Hansen <rhansen@rhansen.org> Co-authored-by: Victor Stinner <vstinner@python.org>
* gh-124218: Use per-thread refcounts for code objects (#125216)Sam Gross2024-10-154-35/+49
| | | | | | | Use per-thread refcounting for the reference from function objects to their corresponding code object. This can be a source of contention when frequently creating nested functions. Deferred refcounting alone isn't a great fit here because these references are on the heap and may be modified by other libraries.
* gh-124375: Avoid calling `_PyMem_ProcessDelayed` on other thread states ↵Sam Gross2024-10-151-6/+12
| | | | | | | | | | | (#124459) This fixes a crash when running the PyO3 test suite on the free-threaded build. The `qsbr` field is initialized after the `PyThreadState` is added to the interpreter's linked list -- it might still be NULL. Instead, we "steal" the queue of to-be-freed memory blocks. This is always initialized (possibly empty) and protected by the stop the world pause.
* gh-125512: Revert "gh-124872: Replace enter/exit events with "switched" ↵Kirill Podoprigora2024-10-151-21/+10
| | | | (#124776)" (#125513)
* gh-125196: Use PyUnicodeWriter in HAMT (#125458)Victor Stinner2024-10-151-50/+31
|
* gh-125234: Make PyInitConfig_Free(NULL) a no-op (#125266)RUANG (Roy James)2024-10-151-0/+3
|
* gh-125470: Fix warning in `Python/generated_cases.c.h` (#125471)sobolevn2024-10-143-0/+6
| | | Co-authored-by: Kirill Podoprigora <kirill.bast9@mail.ru>
* gh-124872: Replace enter/exit events with "switched" (#124776)Richard Hansen2024-10-141-10/+21
| | | | | | | | | | | | | | | | | | | | | | Users want to know when the current context switches to a different context object. Right now this happens when and only when a context is entered or exited, so the enter and exit events are synonymous with "switched". However, if the changes proposed for gh-99633 are implemented, the current context will also switch for reasons other than context enter or exit. Since users actually care about context switches and not enter or exit, replace the enter and exit events with a single switched event. The former exit event was emitted just before exiting the context. The new switched event is emitted after the context is exited to match the semantics users expect of an event with a past-tense name. If users need the ability to clean up before the switch takes effect, another event type can be added in the future. It is not added here because YAGNI. I skipped 0 in the enum as a matter of practice. Skipping 0 makes it easier to troubleshoot when code forgets to set zeroed memory, and it aligns with best practices for other tools (e.g., https://protobuf.dev/programming-guides/dos-donts/#unspecified-enum).
* GH-125323: Convert DECREF_INPUTS_AND_REUSE_FLOAT into a function that takes ↵Mark Shannon2024-10-144-38/+18
| | | | PyStackRefs. (GH-125439)
* gh-125139: use `_PyRecursiveMutex` in `_thread.RLock` (#125144)Kumar Aditya2024-10-141-3/+28
|
* gh-125323: Remove some unsafe Py_DECREFs in bytecodes.c, replacing them with ↵Ken Jin2024-10-143-60/+60
| | | | PyStackRef_CLOSEs (GH-125324)
* gh-125161: return non zero value in pthread_self on wasi (#125303)Kumar Aditya2024-10-131-5/+5
|
* gh-124872: Change PyContext_WatchCallback to take PyObject (#124737)Richard Hansen2024-10-121-3/+3
| | | | | The PyContext struct is not intended to be public, and users of the API don't need anything more specific than PyObject. Also see gh-78943.
* gh-124872: Move PyThreadState to first argument for consistency (#124774)Richard Hansen2024-10-121-3/+4
|
* gh-111924: use atomics for interp id refcounting (#125321)Kumar Aditya2024-10-121-48/+6
|
* gh-125268: Use static string for "1e309" in AST (#125272)Sam Gross2024-10-102-27/+4
| | | | | When formatting the AST as a string, infinite values are replaced by 1e309, which evaluates to infinity. The initialization of this string replacement was not thread-safe in the free threading build.
* GH-125174: Make immortal objects more robust, following design from PEP 683 ↵Mark Shannon2024-10-104-7/+7
| | | | (GH-125251)
* gh-125196: Use PyUnicodeWriter for repr(contextvars.Token) (#125220)Victor Stinner2024-10-091-28/+11
| | | Replace the private _PyUnicodeWriter with the public PyUnicodeWriter.
* gh-125196: Use PyUnicodeWriter in symtable.c (#125199)Victor Stinner2024-10-091-19/+16
|
* gh-115999: Refactor `LOAD_GLOBAL` specializations to avoid reloading ↵mpage2024-10-096-40/+242
| | | | | | | | | | | | | | | | | | {globals, builtins} keys (gh-124953) Each of the `LOAD_GLOBAL` specializations is implemented roughly as: 1. Load keys version. 2. Load cached keys version. 3. Deopt if (1) and (2) don't match. 4. Load keys. 5. Load cached index into keys. 6. Load object from (4) at offset from (5). This is not thread-safe in free-threaded builds; the keys object may be replaced in between steps (3) and (4). This change refactors the specializations to avoid reloading the keys object and instead pass the keys object from guards to be consumed by downstream uops.
* gh-115754: Use Py_GetConstant(Py_CONSTANT_EMPTY_STR) (#125194)Victor Stinner2024-10-096-8/+8
| | | | | Replace PyUnicode_New(0, 0), PyUnicode_FromString("") and PyUnicode_FromStringAndSize("", 0) with Py_GetConstant(Py_CONSTANT_EMPTY_STR).
* gh-125039: Make `this_instr`/`prev_instr` const in cases generator (GH-125071)Tomas R.2024-10-091-72/+72
|
* gh-124502: Remove _PyUnicode_EQ() function (#125114)Victor Stinner2024-10-091-1/+1
| | | | | | * Replace unicode_compare_eq() with unicode_eq(). * Use unicode_eq() in setobject.c. * Replace _PyUnicode_EQ() with _PyUnicode_Equal(). * Remove unicode_compare_eq() and _PyUnicode_EQ().
* gh-125063: Emit slices as constants in the bytecode compiler (#125064)Michael Droettboom2024-10-082-19/+93
| | | | | | | | | | | | | | | | | | | | | | | * Make slices marshallable * Emit slices as constants * Update Python/marshal.c Co-authored-by: Peter Bierma <zintensitydev@gmail.com> * Refactor codegen_slice into two functions so it always has the same net effect * Fix for free-threaded builds * Simplify marshal loading of slices * Only return SUCCESS/ERROR from codegen_slice --------- Co-authored-by: Mark Shannon <mark@hotpy.org> Co-authored-by: Peter Bierma <zintensitydev@gmail.com>
* gh-115999: Stop the world when invalidating function versions (#124997)mpage2024-10-081-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Stop the world when invalidating function versions The tier1 interpreter specializes `CALL` instructions based on the values of certain function attributes (e.g. `__code__`, `__defaults__`). The tier1 interpreter uses function versions to verify that the attributes of a function during execution of a specialization match those seen during specialization. A function's version is initialized in `MAKE_FUNCTION` and is invalidated when any of the critical function attributes are changed. The tier1 interpreter stores the function version in the inline cache during specialization. A guard is used by the specialized instruction to verify that the version of the function on the operand stack matches the cached version (and therefore has all of the expected attributes). It is assumed that once the guard passes, all attributes will remain unchanged while executing the rest of the specialized instruction. Stopping the world when invalidating function versions ensures that all critical function attributes will remain unchanged after the function version guard passes in free-threaded builds. It's important to note that this is only true if the remainder of the specialized instruction does not enter and exit a stop-the-world point. We will stop the world the first time any of the following function attributes are mutated: - defaults - vectorcall - kwdefaults - closure - code This should happen rarely and only happens once per function, so the performance impact on majority of code should be minimal. Additionally, refactor the API for manipulating function versions to more clearly match the stated semantics.
* gh-121404: typo fix in compile.c: MATADATA -> METADATA (#125101)Mikhail Efimov2024-10-081-5/+5
|
* GH-121459: Streamline PyObject* to PyStackRef conversions by disallowing ↵Mark Shannon2024-10-073-52/+54
| | | | NULL pointers. (GH-124894)
* GH-119866: Spill the stack around escaping calls. (GH-124392)Mark Shannon2024-10-078-1406/+2356
| | | | | | | * Spill the evaluation around escaping calls in the generated interpreter and JIT. * The code generator tracks live, cached values so they can be saved to memory when needed. * Spills the stack pointer around escaping calls, so that the exact stack is visible to the cycle GC.
* GH-116968: Remove branch from advance_backoff_counter (GH-124469)Mark Shannon2024-10-073-8/+8
|
* gh-125010: Fix `use-after-free` in AST `repr()` (#125015)Tomas R.2024-10-061-1/+0
|
* gh-112804: Clamping timeout value for _PySemaphore_PlatformWait (gh-124914)Donghee Na2024-10-051-1/+8
| | | | | | | * gh-112804: Clamping timeout value for _PySemaphore_PlatformWait * Address code review * nit
* gh-124871: fix 'visited' tracking in compiler's reachability analysis (#124952)Irit Katriel2024-10-041-2/+3
|
* gh-111178: Fix function signatures in Python-ast.c (#124942)Victor Stinner2024-10-041-7/+11
|
* GH-118093: Don't lose confidence when tracing through 100% biased branches ↵Brandt Bucher2024-10-021-4/+2
| | | | (GH-124813)
* GH-119726: Deduplicate AArch64 trampolines within a trace (GH-123872)Diego Russo2024-10-021-8/+84
|
* gh-120619: Optimize through `_Py_FRAME_GENERAL` (GH-124518)Ken Jin2024-10-023-47/+54
| | | | | * Optimize through _Py_FRAME_GENERAL * refactor