| // Flags: --expose-gc |
| 'use strict'; |
| const common = require('../common'); |
| const onGC = require('../common/ongc'); |
| const { createServer } = require('http'); |
| const { connect } = require('net'); |
| |
| // Make sure that for HTTP keepalive requests, the req object can be |
| // garbage collected once the request is finished. |
| // Refs: https://github.com/nodejs/node/issues/9668 |
| |
| let client; |
| const server = createServer(common.mustCall((req, res) => { |
| onGC(req, { ongc: common.mustCall(() => { server.close(); }) }); |
| req.resume(); |
| req.on('end', common.mustCall(() => { |
| setImmediate(() => { |
| client.end(); |
| global.gc(); |
| }); |
| })); |
| res.end('hello world'); |
| })); |
| |
| server.listen(0, common.mustCall(() => { |
| client = connect(server.address().port); |
| |
| const req = [ |
| 'POST / HTTP/1.1', |
| `Host: localhost:${server.address().port}`, |
| 'Connection: keep-alive', |
| 'Content-Length: 11', |
| '', |
| 'hello world', |
| '' |
| ].join('\r\n'); |
| |
| client.write(req); |
| client.unref(); |
| })); |