Fix termination of generators when client connection is closed #8582
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.
Current Issue
We are currently not closing down our response generators after the client closes the connection. This leads to resource leaks, as the generators keep running in the background, even though no one will ever read the response.
This snipped from hypercorn
http_stream.py
shows us, that all responsesend
calls will return immediately once the connection is closed.We now need to also stop the generators, once we detect the client connection is closed.
Changes
send
call to determine if the connection to the client is closed already and raise aBrokenPipeError
in that case.ConnectionError
is raised during sending data from the iterator, we stop reading from it and close the (async) generator