diff options
author | Fedor Indutny <fedor@indutny.com> | 2016-04-19 16:41:13 -0400 |
---|---|---|
committer | Fedor Indutny <fedor@indutny.com> | 2016-04-20 13:57:54 -0400 |
commit | ec2822adaad76b126b5cccdeaa1addf2376c9aa6 (patch) | |
tree | f6f5700d0c02af2848002874ef236a39e51e6034 /test/parallel/test-http-server-consumed-timeout.js | |
parent | 75487f0db80e70a3e27fabfe323a33258dfbbea8 (diff) | |
download | android-node-v8-ec2822adaad76b126b5cccdeaa1addf2376c9aa6.tar.gz android-node-v8-ec2822adaad76b126b5cccdeaa1addf2376c9aa6.tar.bz2 android-node-v8-ec2822adaad76b126b5cccdeaa1addf2376c9aa6.zip |
http: unref socket timer on parser execute
When underlying `net.Socket` instance is consumed in http server - no
`data` events are emitted, and thus `socket.setTimeout` fires the
callback even if the data is constantly flowing into the socket.
Fix this by calling `socket._unrefTimer()` on every `onParserExecute`
call.
Fix: #5899
PR-URL: https://github.com/nodejs/node/pull/6286
Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'test/parallel/test-http-server-consumed-timeout.js')
-rw-r--r-- | test/parallel/test-http-server-consumed-timeout.js | 36 |
1 files changed, 36 insertions, 0 deletions
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 0000000000..26110b32e7 --- /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('.'); +})); |