Skip to content

Commit b80a5d6

Browse files
committed
msg.finished is only finished if socket has been detached
1 parent 08345db commit b80a5d6

File tree

2 files changed

+13
-2
lines changed

2 files changed

+13
-2
lines changed

index.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,21 @@ function onFinished (msg, listener) {
6464

6565
function isFinished (msg) {
6666
var socket = msg.socket
67+
var stream = msg.stream
68+
69+
if (stream && typeof stream.closed === 'boolean') {
70+
// Http2ServerRequest
71+
// Http2ServerResponse
72+
return stream.closed
73+
}
6774

6875
if (typeof msg.finished === 'boolean') {
6976
// OutgoingMessage
70-
return Boolean(msg.finished || (socket && !socket.writable))
77+
return (
78+
this.finished &&
79+
this.outputSize === 0 &&
80+
(!this.socket || this.socket.writableLength === 0)
81+
) || (socket && !socket.writable)
7182
}
7283

7384
if (typeof msg.complete === 'boolean') {

test/test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,8 +219,8 @@ describe('isFinished(res)', function () {
219219

220220
it('should be false before response finishes', function (done) {
221221
var server = http.createServer(function (req, res) {
222-
assert.ok(!onFinished.isFinished(res))
223222
res.end()
223+
assert.ok(!onFinished.isFinished(res))
224224
done()
225225
})
226226

0 commit comments

Comments
 (0)