Fix TaskManager finished tasks memory leak - #266
Merged
ThomasFarstrike merged 1 commit intoAug 24, 2026
Merged
Conversation
Remove managed tasks from TaskManager.task_list as soon as they finish so completed coroutine frames and captured objects can be garbage collected. Preserve task results, exceptions, cancellation, and running-task tracking.
ThomasFarstrike
force-pushed
the
task-manager-completed-task-cleanup
branch
from
August 24, 2026 11:15
82c7674 to
23b8efc
Compare
Contributor
|
Another step in the right direction! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR fixes a memory leak in
TaskManager.TaskManagerpreviously retained every task created throughcreate_task(), which also kept completed coroutine frames and their captured objects alive indefinitely.We fix this by removing managed tasks from
TaskManager.task_listas soon as they finish (using try/finally) so completed coroutine frames and captured objects can be garbage collected. Preserve task results, exceptions, cancellation, and running-task tracking.We added multiple tests in
test_task_manager.pyto check the behavior and catch regressions.This fixes #261.