fix(rt): coroutine leak in ktor engine #628
Merged
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.
Issue #
fixes: awslabs/aws-sdk-kotlin#587
Description of changes
Fixes a coroutine leak in the ktor engine due to invalid parent-child
relationship. The ktor engine was launching a coroutine as a child of
the request job (
calLContext()
). The issue was that this childcoroutine was relying on the parent job completion notification
to exit. Parent jobs can't complete though until all their children
do so the child coroutine never completed.
The ktor engine now uses the engine scope to launch this child
coroutine and establishes no parent-child relationship to the
request job explicitly.
Testing
This code polls SQS on a 1-sec interval. Before this fix you could see
DefaultSqsClient
slowly become the largest object (30-45+min of running):After this fix (and after ~45 min of running) the SQS client is the same size it was when the program started:
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.