http: onFinish will not be triggered again when finished
PR-URL: https://github.com/nodejs/node/pull/35845 Fixes: https://github.com/nodejs/node/issues/35833 Reviewed-By: Robert Nagy <ronagy@icloud.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Rich Trott <rtrott@gmail.com>
This commit is contained in:
parent
c1442ec9c4
commit
e6e64f7a21
@ -814,6 +814,12 @@ OutgoingMessage.prototype.end = function end(chunk, encoding, callback) {
|
||||
}
|
||||
|
||||
if (chunk) {
|
||||
if (this.finished) {
|
||||
onError(this,
|
||||
new ERR_STREAM_WRITE_AFTER_END(),
|
||||
typeof callback !== 'function' ? nop : callback);
|
||||
return this;
|
||||
}
|
||||
write_(this, chunk, encoding, null, true);
|
||||
} else if (this.finished) {
|
||||
if (typeof callback === 'function') {
|
||||
|
@ -3,9 +3,17 @@ const common = require('../common');
|
||||
const assert = require('assert');
|
||||
const http = require('http');
|
||||
|
||||
const onWriteAfterEndError = common.mustCall((err) => {
|
||||
assert.strictEqual(err.code, 'ERR_STREAM_WRITE_AFTER_END');
|
||||
}, 2);
|
||||
|
||||
const server = http.createServer(common.mustCall(function(req, res) {
|
||||
res.end('testing ended state', common.mustCall());
|
||||
res.end(common.mustCall());
|
||||
res.end(common.mustCall((err) => {
|
||||
assert.strictEqual(err.code, 'ERR_STREAM_ALREADY_FINISHED');
|
||||
}));
|
||||
res.end('end', onWriteAfterEndError);
|
||||
res.on('error', onWriteAfterEndError);
|
||||
res.on('finish', common.mustCall(() => {
|
||||
res.end(common.mustCall((err) => {
|
||||
assert.strictEqual(err.code, 'ERR_STREAM_ALREADY_FINISHED');
|
||||
|
Loading…
x
Reference in New Issue
Block a user