Skip to content

Commit 3b02042

Browse files
ronagtargos
authored andcommittedApr 22, 2020
http: don't emit 'readable' after 'close'
PR-URL: #32277 Refs: #28710 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: James M Snell <jasnell@gmail.com>
1 parent e51c42d commit 3b02042

File tree

3 files changed

+12
-3
lines changed

3 files changed

+12
-3
lines changed
 

‎lib/_http_server.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -660,9 +660,12 @@ function clearIncoming(req) {
660660
if (parser && parser.incoming === req) {
661661
if (req.readableEnded) {
662662
parser.incoming = null;
663+
req.emit('close');
663664
} else {
664665
req.on('end', clearIncoming);
665666
}
667+
} else {
668+
req.emit('close');
666669
}
667670
}
668671

@@ -673,7 +676,6 @@ function resOnFinish(req, res, socket, state, server) {
673676
assert(state.incoming.length === 0 || state.incoming[0] === req);
674677

675678
state.incoming.shift();
676-
clearIncoming(req);
677679

678680
// If the user never called req.read(), and didn't pipe() or
679681
// .resume() or .on('data'), then we call req._dump() so that the
@@ -682,7 +684,7 @@ function resOnFinish(req, res, socket, state, server) {
682684
req._dump();
683685

684686
res.detachSocket(socket);
685-
req.emit('close');
687+
clearIncoming(req);
686688
process.nextTick(emitCloseNT, res);
687689

688690
if (res._last) {

‎test/parallel/test-async-hooks-http-parser-destroy.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
'use strict';
2-
require('../common');
2+
const common = require('../common');
33
const assert = require('assert');
44
const async_hooks = require('async_hooks');
55
const http = require('http');
@@ -45,6 +45,9 @@ async_hooks.createHook({
4545
}).enable();
4646

4747
const server = http.createServer((req, res) => {
48+
req.on('close', common.mustCall(() => {
49+
req.on('readable', common.mustNotCall());
50+
}));
4851
res.end('Hello');
4952
});
5053

‎test/parallel/test-http-no-read-no-dump.js

+4
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@ const server = http.createServer((req, res) => {
1111
res.writeHead(200);
1212
res.flushHeaders();
1313

14+
req.on('close', common.mustCall(() => {
15+
req.on('end', common.mustNotCall());
16+
}));
17+
1418
req.connection.on('pause', () => {
1519
res.end();
1620
onPause();

0 commit comments

Comments
 (0)
Please sign in to comment.