File tree Expand file tree Collapse file tree 2 files changed +19
-14
lines changed
lib/async/http/protocol/http1 Expand file tree Collapse file tree 2 files changed +19
-14
lines changed Original file line number Diff line number Diff line change @@ -64,21 +64,22 @@ def each(task: Task.current)
6464 task . annotate ( "Reading #{ self . version } requests for #{ self . class } ." )
6565
6666 while request = next_request
67- if body = request . body
68- finishable = Finishable . new ( body )
69- request . body = finishable
70- end
71-
72- response = yield ( request , self )
73- version = request . version
74- body = response &.body
75-
76- if hijacked?
77- body &.close
78- return
79- end
80-
67+ # We have received complete request (line + headers), so defer stop until the response is generated.
8168 task . defer_stop do
69+ if body = request . body
70+ finishable = Finishable . new ( body )
71+ request . body = finishable
72+ end
73+
74+ response = yield ( request , self )
75+ version = request . version
76+ body = response &.body
77+
78+ if hijacked?
79+ body &.close
80+ return
81+ end
82+
8283 # If a response was generated, send it:
8384 if response
8485 trailer = response . headers . trailer!
Original file line number Diff line number Diff line change 11# Releases
22
3+ ## Unreleased
4+
5+ - Fix ` defer_stop ` usage in ` HTTP1::Server ` , improving server graceful shutdown behavior.
6+
37## v0.94.0
48
59 - Propagate all errors from background reader to active streams so that they are closed correctly (e.g. errors are not missed).
You can’t perform that action at this time.
0 commit comments