Emit drain event when the request is ready to receive more data #33
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.
Currently,
HttpClient\Requestisn't a well-behavedWritableStreamInterface:write()can returnfalse(telling the user to stop writing to it until it emits adrainevent), but there are cases where it never emits adrainevent: When callingwrite()before the headers have been sent,write()returns false and actually writes the body later. However, it doesn't emit adrainevent.This is a problem, for instance, when using pipe():
pipe()will pause$readableStreamwhen$request->write()returnsfalse, and resume$readableStreamwhen$requestemits adrainevent. If$requestnever emits a drain event, the pipe operation never finishes.This PR fixes that by emitting a drain event when the request is ready to receive more
write()calls.