Skip to content

Commit 3d2085f

Browse files
committed
fix: Client.stream writableNeedDrain
Fixes: #441 Refs: nodejs/node#35348 Refs: nodejs/node#35341
1 parent 4208071 commit 3d2085f

File tree

4 files changed

+11
-3
lines changed

4 files changed

+11
-3
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -473,7 +473,7 @@ The `handler` parameter is defined as follow:
473473
* `statusCode: Number`
474474
* `headers: Array|Null`
475475
* `socket: Duplex`
476-
* `onHeaders(statusCode, headers, resume): Void`, invoked when statusCode and headers have been received.
476+
* `onHeaders(statusCode, headers, resume): Boolean`, invoked when statusCode and headers have been received.
477477
May be invoked multiple times due to 1xx informational headers.
478478
* `statusCode: Number`
479479
* `headers: Array|Null`, an array of key-value pairs. Keys are not automatically lowercased.

lib/client-stream.js

+6
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,12 @@ class StreamHandler extends AsyncResource {
109109
})
110110

111111
this.res = res
112+
113+
const needDrain = res.writableNeedDrain !== undefined
114+
? res.writableNeedDrain
115+
: res._writableState && res._writableState.needDrain
116+
117+
return needDrain
112118
}
113119

114120
onData (chunk) {

lib/core/client.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -535,7 +535,9 @@ class Parser extends HTTPParser {
535535
}
536536

537537
try {
538-
request.onHeaders(statusCode, headers, statusCode < 200 ? null : socket[kResume])
538+
if (request.onHeaders(statusCode, headers, statusCode < 200 ? null : socket[kResume]) === false) {
539+
socket[kPause]()
540+
}
539541
} catch (err) {
540542
util.destroy(socket, err)
541543
return 1

lib/core/request.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ class Request {
117117

118118
clearRequestTimeout(this)
119119

120-
this[kHandler].onHeaders(statusCode, headers, resume)
120+
return this[kHandler].onHeaders(statusCode, headers, resume)
121121
}
122122

123123
onBody (chunk, offset, length) {

0 commit comments

Comments
 (0)