Pablo Galindo Salgado
a5e628beb8
gh-91048: Prevent optimizing away the asyncio debug offsets structure on Windows ( #132963 )
...
To avoid having the debug sections being optimised away by the compiler
we use __attribute__((used)) on gcc and clang but in Windows this is
not supported by the Microsoft compiler and there is no equivalent flag.
Unfortunately Windows offers almost no alternative other than exporting
the symbol in the dynamic table or using it somehow.
2025-04-25 17:43:32 +00:00
Łukasz Langa
c9bc458d30
gh-91048: Add ability to list all pending asyncio tasks in a process remotely ( #132807 )
2025-04-23 18:22:29 +01:00
Srinivas Reddy Thatiparthy (తాటిపర్తి శ్రీనివాస్ రెడ్డి)
25717ff4bf
Remove unused headers from _asynciomodule.c file ( #132047 )
...
Co-authored-by: Kumar Aditya <kumaraditya@python.org>
2025-04-16 18:20:41 +00:00
Chris Eibl
d827d4d018
gh-131591: Fix GENERATE_DEBUG_SECTION for clangcl on Windows (GH-132112)
2025-04-06 00:00:54 +08:00
Bénédikt Tran
edbf7fb129
gh-111178: remove redundant casts for functions with correct signatures ( #131673 )
2025-04-01 17:18:11 +02:00
Bénédikt Tran
ef06508f8e
gh-111178: fix UBSan failures for `TaskStepMethWrapper` ( #131602 )
2025-03-23 19:56:03 +05:30
Mark Shannon
a45f25361d
GH-131238: More refactoring of core header files (GH-131351)
...
Adds new pycore_stats.h header file to help break dependencies involving the pycore_code.h header.
2025-03-17 14:41:05 +00:00
Victor Stinner
ca7fd814e4
gh-111178: Fix function signatures in `_asynciomodule.c` ( #131228 )
2025-03-14 13:37:39 +00:00
Victor Stinner
9d759b63d8
gh-111178: Change Argument Clinic signature for METH_O ( #130682 )
...
Use "PyObject*" for METH_O functions to fix an undefined behavior.
2025-03-11 16:33:36 +01:00
Kumar Aditya
7e3b788e8f
gh-128002: use efficient linked list implementation for eager tasks in asyncio ( #130518 )
2025-03-03 06:36:43 +00:00
Kumar Aditya
5f00501a94
gh-130221: fix crash when accessing module state while interp is finalizing in asyncio ( #130245 )
2025-02-19 22:07:56 +05:30
Kumar Aditya
660f126f87
gh-129898: per-thread current task implementation in asyncio ( #129899 )
...
Store the current running task on the thread state, it makes it thread safe for the free-threading build and while improving performance as there is no lock contention, this effectively makes it lock free.
When accessing the current task of the current running loop in current thread, no locking is required and can be acessed without locking.
In the rare case of accessing current task of a loop running in a different thread, the stop the world pauses is used in free-threading builds to stop all other running threads and find the task for the specified loop.
This also makes it easier for external introspection to find the current task, and now it will be always correct.
2025-02-19 16:34:49 +00:00
Kumar Aditya
c7a9d06e06
gh-128002: optimistically remove tasks from linked list when finished ( #129995 )
2025-02-13 13:19:53 +05:30
Kumar Aditya
94cd2e0dde
gh-129289: fix crash when task finalizer is not called in asyncio ( #129840 )
2025-02-10 17:03:59 +05:30
Kumar Aditya
bff4bfeae1
gh-128002: add fast path for native tasks in `asyncio.all_tasks` ( #129943 )
2025-02-10 15:04:33 +05:30
Kumar Aditya
7246b9124c
gh-128002: simplify `asyncio.all_tasks` to use `PyList_Extend` instead of manual iteration ( #129942 )
2025-02-10 14:26:32 +05:30
Kumar Aditya
0d68b14a0d
gh-128002: use per threads tasks linked list in asyncio ( #128869 )
...
Co-authored-by: Łukasz Langa <lukasz@langa.pl>
2025-02-06 19:51:07 +01:00
Kumar Aditya
e7bc0cd182
gh-91048: fix `_asyncio.future_discard_from_awaited_by` ( #129731 )
...
fix discard
2025-02-06 16:35:33 +00:00
Kumar Aditya
75c551974f
gh-91048: fix thread safety for asyncio stack introspection APIs ( #129399 )
2025-02-06 21:33:52 +05:30
Victor Stinner
3447f4a56a
gh-129354: Use PyErr_FormatUnraisable() function ( #129514 )
...
Replace PyErr_WriteUnraisable() with PyErr_FormatUnraisable().
2025-01-31 14:20:35 +01:00
Kumar Aditya
8e0b36006c
gh-128002: use `_PyObject_SetMaybeWeakref` when creating tasks in asyncio ( #128885 )
2025-01-24 21:12:56 +05:30
Łukasz Langa
fc3d400165
gh-91048: Also clear and set ts->asyncio_running_task with eager tasks ( #129197 )
...
This was missing from gh-124640. It's already covered by the new
test_asyncio/test_free_threading.py in combination with the runtime
assertion in set_ts_asyncio_running_task.
Co-authored-by: Kumar Aditya <kumaraditya@python.org>
2025-01-23 19:26:36 +01:00
Yury Selivanov
188598851d
GH-91048: Add utils for capturing async call stack for asyncio programs and enable profiling ( #124640 )
...
Signed-off-by: Pablo Galindo <pablogsal@gmail.com>
Co-authored-by: Pablo Galindo <pablogsal@gmail.com>
Co-authored-by: Kumar Aditya <kumaraditya@python.org>
Co-authored-by: Łukasz Langa <lukasz@langa.pl>
Co-authored-by: Savannah Ostrowski <savannahostrowski@gmail.com>
Co-authored-by: Jacob Coffee <jacob@z7x.org>
Co-authored-by: Irit Katriel <1055913+iritkatriel@users.noreply.github.com>
2025-01-22 17:25:29 +01:00
Kumar Aditya
7dc41ad6a7
gh-128002: fix `asyncio.all_tasks` against concurrent deallocations of tasks ( #128541 )
2025-01-09 21:26:00 +05:30
Kumar Aditya
513a4efa75
gh-128002: fix many thread safety issues in asyncio ( #128147 )
...
* Makes `_asyncio.Task` and `_asyncio.Future` thread-safe by adding critical sections
* Add assertions to check for thread safety checking locking of object by critical sections in internal functions
* Make `_asyncio.all_tasks` thread safe when eager tasks are used
* Add a thread safety test
2025-01-04 14:18:22 +05:30
Yan Yanchii
5c814c83cd
gh-128198: Add missing error checks for usages of PyIter_Next() (GH-128199)
2024-12-25 19:42:04 +02:00
Kumar Aditya
76f1785657
gh-128002: use internal llist implementation for asyncio tasks ( #128256 )
2024-12-25 17:51:27 +05:30
Kumar Aditya
8a433b683f
gh-121621: clear running loop early in asyncio ( #128004 )
2024-12-18 14:25:03 +00:00
Kumar Aditya
dbd08fb60d
gh-127949: deprecate `asyncio.get_event_loop_policy` ( #128053 )
...
This deprecates `asyncio.get_event_loop_policy` and will be removed in Python 3.16.
2024-12-18 18:04:20 +05:30
Kumar Aditya
37c57dfad1
gh-126405: fix use-after-free in `_asyncio.Future.remove_done_callback` ( #126733 )
2024-11-12 18:01:34 +05:30
Kumar Aditya
b19d12f447
remove minor redundant code from `_asyncio` ( #126578 )
2024-11-08 13:17:03 +00:00
Kumar Aditya
a3e8e7bbc3
GH-107803: use circular double linked list for tasks in `_asyncio` ( #126577 )
2024-11-08 12:51:11 +00:00
Nico-Posada
f032f6ba8f
gh-126138: Fix use-after-free in `_asyncio.Task` by evil `__getattribute__` ( #126305 )
...
Co-authored-by: Carol Willing <carolcode@willingconsulting.com>
2024-11-02 13:16:00 +05:30
Bénédikt Tran
0e8665554b
gh-126080: fix UAF on `task->task_context` in `task_call_step_soon` due to an evil `loop.__getattribute__` ( #126120 )
2024-10-31 10:14:47 -07:00
Nico-Posada
d07dcce693
gh-126083: Fix a reference leak in `asyncio.Task` when reinitializing with new non-`None` context ( #126103 )
2024-10-31 10:47:57 +03:00
Bénédikt Tran
ed5059eeb1
gh-125966: fix use-after-free on `fut->fut_callback0` due to an evil callback's `__eq__` in asyncio ( #125967 )
2024-10-27 22:40:10 +05:30
Bénédikt Tran
f819d4301d
gh-125984: fix use-after-free on `fut->fut_{callback,context}0` due to an evil `loop.__getattribute__` ( #126003 )
2024-10-27 20:34:43 +05:30
Bénédikt Tran
c5b99f5c2c
gh-125969: fix OOB in `future_schedule_callbacks` due to an evil `call_soon` ( #125970 )
...
Co-authored-by: Andrew Svetlov <andrew.svetlov@gmail.com>
2024-10-25 23:45:09 +05:30
Kumar Aditya
cae853e3b4
GH-125789: fix `fut._callbacks` to always return a copy of callbacks ( #125922 )
...
Fix `asyncio.Future._callbacks` to always return a copy of the internal list of callbacks to avoid mutation from user code affecting the internal state.
2024-10-25 18:19:30 +05:30
Mark Shannon
c9014374c5
GH-125174: Make immortal objects more robust, following design from PEP 683 (GH-125251)
2024-10-10 18:19:08 +01:00
Petr Viktorin
57c471a688
gh-123091: Use more _Py_IsImmortalLoose() (GH-123602)
...
Switch more _Py_IsImmortal(...) assertions to _Py_IsImmortalLoose(...)
The remaining calls to _Py_IsImmortal are in free-threaded-only code,
initialization of core objects, tests, and guards that fall back to
code that works with mortal objects.
2024-09-02 18:17:48 +02:00
Kumar Aditya
3aaed083a3
GH-120974: make `_asyncio.all_tasks` thread safe ( #122801 )
...
Make `_asyncio.all_tasks` thread safe, also changes state lock to use critical section.
2024-08-11 20:49:31 +05:30
Sam Gross
b5e6fb39a2
gh-120974: Make asyncio `swap_current_task` safe in free-threaded build ( #122317 )
...
* gh-120974: Make asyncio `swap_current_task` safe in free-threaded build
2024-08-02 19:02:08 +05:30
Peter Bierma
c08696286f
gh-122332: Fix missing `NULL` check in `asyncio.Task.get_coro` ( #122338 )
2024-07-27 11:57:48 +05:30
Sam Gross
a15feded71
gh-120974: Make _asyncio._leave_task atomic in the free-threaded build ( #122139 )
...
* gh-120974: Make _asyncio._leave_task atomic in the free-threaded build
Update `_PyDict_DelItemIf` to allow for an argument to be passed to the
predicate.
2024-07-23 17:06:03 +00:00
Sam Gross
c908d1f87d
gh-120974: Use common freelist code in asyncio ( #122132 )
...
This refactors asyncio to use the common freelist helper functions and
macros. As a side effect, the freelist for _asyncio.Future is now
re-enabled in the free-threaded build.
2024-07-23 21:54:24 +05:30
Sam Gross
47847aa8ef
gh-120974: Make _asyncio._enter_task atomic in the free-threaded build ( #122138 )
...
Use `PyDict_SetDefaultRef` to set the current task in a single operation
under the dictionary's lock.
2024-07-23 14:17:14 +05:30
Sam Gross
97248204a1
gh-121621: Disable asyncio freelist in free-threaded build ( #122046 )
...
The futureobj freelist isn't thread-safe. We intend to re-enable the
freelist in a thread-safe way for 3.14 (but not 3.13).
2024-07-19 15:26:29 -04:00
Sam Gross
81fd625b5c
gh-121621: Move asyncio_running_loop to private struct ( #121939 )
...
This avoids changing the ABI and keeps the field in the private struct.
2024-07-17 15:21:24 -07:00
Ken Jin
69c68de43a
gh-121621: Move asyncio running loop to thread state (GH-121695)
2024-07-17 01:09:58 +08:00