Skip to content

Commit cd753c4

Browse files
committed
stream: finished on closed OutgoingMessage
finished should invoke callback on closed OutgoingMessage the same way as for regular streams. Fixes: nodejs#34301
1 parent 4e3f6f3 commit cd753c4

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

lib/internal/streams/end-of-stream.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ const {
77
ERR_INVALID_ARG_TYPE,
88
ERR_STREAM_PREMATURE_CLOSE
99
} = require('internal/errors').codes;
10+
const { kClosed } = require('internal/http');
1011
const { once } = require('internal/util');
1112

1213
function isRequest(stream) {
@@ -147,7 +148,7 @@ function eos(stream, opts, callback) {
147148
if (opts.error !== false) stream.on('error', onerror);
148149
stream.on('close', onclose);
149150

150-
const closed = (
151+
const closed = stream[kClosed] === true || (
151152
(wState && wState.closed) ||
152153
(rState && rState.closed) ||
153154
(wState && wState.errorEmitted) ||

test/parallel/test-stream-finished.js

+19
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ const assert = require('assert');
1313
const EE = require('events');
1414
const fs = require('fs');
1515
const { promisify } = require('util');
16+
const http = require('http');
1617

1718
{
1819
const rs = new Readable({
@@ -480,3 +481,21 @@ testClosed((opts) => new Writable({ write() {}, ...opts }));
480481
finished(p, common.mustNotCall());
481482
}));
482483
}
484+
485+
{
486+
const server = http.createServer((req, res) => {
487+
res.on('close', () => {
488+
finished(res, common.mustCall(() => {
489+
server.close();
490+
}));
491+
});
492+
res.end();
493+
})
494+
.listen(0, function() {
495+
http.request({
496+
method: 'GET',
497+
port: this.address().port
498+
}).end()
499+
.on('response', common.mustCall());
500+
});
501+
}

0 commit comments

Comments
 (0)