diff --git a/lib/_http_server.js b/lib/_http_server.js index c8c3389817bc32..819ad421c899a8 100644 --- a/lib/_http_server.js +++ b/lib/_http_server.js @@ -364,6 +364,7 @@ function connectionListener(socket) { } function onParserExecute(ret, d) { + socket._unrefTimer(); debug('SERVER socketOnParserExecute %d', ret); onParserExecuteCommon(ret, undefined); } diff --git a/test/parallel/test-http-server-consumed-timeout.js b/test/parallel/test-http-server-consumed-timeout.js new file mode 100644 index 00000000000000..26110b32e7fba4 --- /dev/null +++ b/test/parallel/test-http-server-consumed-timeout.js @@ -0,0 +1,36 @@ +'use strict'; + +const common = require('../common'); +const assert = require('assert'); +const http = require('http'); + +const server = http.createServer((req, res) => { + server.close(); + + res.writeHead(200); + res.flushHeaders(); + + req.setTimeout(common.platformTimeout(200), () => { + assert(false, 'Should not happen'); + }); + req.resume(); + req.once('end', common.mustCall(() => { + res.end(); + })); +}); + +server.listen(common.PORT, common.mustCall(() => { + const req = http.request({ + port: common.PORT, + method: 'POST' + }, (res) => { + const interval = setInterval(() => { + req.write('a'); + }, common.platformTimeout(25)); + setTimeout(() => { + clearInterval(interval); + req.end(); + }, common.platformTimeout(400)); + }); + req.write('.'); +}));