Skip to content

Fixed get_current_task() crashing with no current task on asyncio - #1312

Open
AmirF194 wants to merge 1 commit into
agronholm:masterfrom
AmirF194:fix/773-get-current-task-none-weakref
Open

Fixed get_current_task() crashing with no current task on asyncio#1312
AmirF194 wants to merge 1 commit into
agronholm:masterfrom
AmirF194:fix/773-get-current-task-none-weakref

Conversation

@AmirF194

@AmirF194 AmirF194 commented Sep 4, 2026

Copy link
Copy Markdown

NOTE Erasing or replacing the contents of this template will result in your pull
request being summarily closed without consideration!

Changes

Fixes #773.

run_sync_from_thread() schedules its callback via loop.call_soon_threadsafe(), which runs outside of any asyncio.Task, so current_task() is None in there. get_current_task() builds AsyncIOTaskInfo(current_task()) regardless, and AsyncIOTaskInfo.__init__ does _task_states.get(task) on a WeakKeyDictionary, which can't weak-reference None and blows up with the opaque TypeError from the issue.

Same "no current task" case #1163 already guards for CancelScope.__enter__ and cancel_shielded_checkpoint(), just a call site it doesn't touch. This raises a clear RuntimeError instead, matching that shape.

Checklist

If this is a user-facing code change, like a bugfix or a new feature, please ensure that
you've fulfilled the following conditions (where applicable):

  • You've added tests (in tests/) which would fail without your patch
  • You've updated the documentation (in docs/), in case of behavior changes or new
    features
  • You've added a new changelog entry (in docs/versionhistory.rst).

If this is a trivial change, like a typo fix or a code reformatting, then you can ignore
these instructions.

Updating the changelog

If there are no entries after the last release, use **UNRELEASED** as the version.
If, say, your patch fixes issue #123, the entry should look like this:

- Fix big bad boo-boo in task groups
  (`#123 <https://github.com/agronholm/anyio/issues/123>`_; PR by @yourgithubaccount)

If there's no issue linked, just link to your pull request instead by updating the
changelog after you've created the PR.

run_sync_from_thread() runs its callback via call_soon_threadsafe(),
outside of any Task, so current_task() is None there. get_current_task()
built AsyncIOTaskInfo(None) anyway, and its WeakKeyDictionary lookup
can't weak-reference None, raising an opaque TypeError instead of a
clear error.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Error when using Lock from thread in asyncio

1 participant