http2: always call callback on Http2ServerResponse#end

Fixes: https://github.com/nodejs/node/issues/28001

PR-URL: https://github.com/nodejs/node/pull/33911
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Denys Otrishko <shishugi@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
This commit is contained in:
Pranshu Srivastava
2020-06-16 23:22:15 +05:30
committed by Anna Henningsen
parent e199fc5534
commit fdcd4893ff
2 changed files with 14 additions and 11 deletions

View File

@@ -709,11 +709,6 @@ class Http2ServerResponse extends Stream {
const stream = this[kStream];
const state = this[kState];
if ((state.closed || state.ending) &&
state.headRequest === stream.headRequest) {
return this;
}
if (typeof chunk === 'function') {
cb = chunk;
chunk = null;
@@ -722,6 +717,14 @@ class Http2ServerResponse extends Stream {
encoding = 'utf8';
}
if ((state.closed || state.ending) &&
state.headRequest === stream.headRequest) {
if (typeof cb === 'function') {
process.nextTick(cb);
}
return this;
}
if (chunk !== null && chunk !== undefined)
this.write(chunk, encoding);

View File

@@ -25,16 +25,16 @@ const {
// but callback will only be called once
const server = createServer(mustCall((request, response) => {
response.end('end', 'utf8', mustCall(() => {
response.end(mustNotCall());
response.end(mustCall());
process.nextTick(() => {
response.end(mustNotCall());
response.end(mustCall());
server.close();
});
}));
response.on('finish', mustCall(() => {
response.end(mustNotCall());
response.end(mustCall());
}));
response.end(mustNotCall());
response.end(mustCall());
}));
server.listen(0, mustCall(() => {
let data = '';
@@ -294,7 +294,7 @@ const {
}));
response.end('data', mustCall(() => {
strictEqual(finished, false);
response.end('data', mustNotCall());
response.end('data', mustCall());
}));
}));
server.listen(0, mustCall(() => {
@@ -328,7 +328,7 @@ const {
// Should be able to respond to HEAD with just .end
const server = createServer(mustCall((request, response) => {
response.end('data', mustCall());
response.end(mustNotCall());
response.end(mustCall());
}));
server.listen(0, mustCall(() => {
const { port } = server.address();