Skip to content

Commit 5c3c953

Browse files
committed
pythongh-133745: Fix asyncio task factory name/context kwarg breaks
1 parent 05ddd06 commit 5c3c953

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

Lib/asyncio/base_events.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -458,16 +458,26 @@ def create_future(self):
458458
"""Create a Future object attached to the loop."""
459459
return futures.Future(loop=self)
460460

461-
def create_task(self, coro, **kwargs):
461+
def create_task(self, coro, *, name=None, context=None, **kwargs):
462462
"""Schedule a coroutine object.
463463
464464
Return a task object.
465465
"""
466466
self._check_closed()
467467
if self._task_factory is not None:
468-
return self._task_factory(self, coro, **kwargs)
468+
if context is not None:
469+
kwargs["context"] = context
469470

470-
task = tasks.Task(coro, loop=self, **kwargs)
471+
task = self._task_factory(self, coro, **kwargs)
472+
task.set_name(name)
473+
try:
474+
# gh-128552: prevent a refcycle of
475+
# task.exception().__traceback__->BaseEventLoop.create_task->task
476+
return task
477+
finally:
478+
del task
479+
480+
task = tasks.Task(coro, loop=self, name=name, context=context, **kwargs)
471481
if task._source_traceback:
472482
del task._source_traceback[-1]
473483
try:

0 commit comments

Comments
 (0)