1'use strict'; 2// Flags: --expose-gc 3// just like test-gc-http-client.js, 4// but with an on('error') handler that does nothing. 5 6const common = require('../common'); 7const onGC = require('../common/ongc'); 8 9const cpus = require('os').cpus().length; 10 11function serverHandler(req, res) { 12 req.resume(); 13 res.writeHead(200, { 'Content-Type': 'text/plain' }); 14 res.end('Hello World\n'); 15} 16 17const http = require('http'); 18let createClients = true; 19let done = 0; 20let count = 0; 21let countGC = 0; 22 23const server = http.createServer(serverHandler); 24server.listen(0, common.mustCall(() => { 25 for (let i = 0; i < cpus; i++) 26 getAll(); 27})); 28 29function getAll() { 30 if (createClients) { 31 const req = http.get({ 32 hostname: 'localhost', 33 pathname: '/', 34 port: server.address().port 35 }, cb).on('error', onerror); 36 37 count++; 38 onGC(req, { ongc }); 39 40 setImmediate(getAll); 41 } 42} 43 44function cb(res) { 45 res.resume(); 46 done++; 47} 48 49function onerror(err) { 50 throw err; 51} 52 53function ongc() { 54 countGC++; 55} 56 57setImmediate(status); 58 59function status() { 60 if (done > 0) { 61 createClients = false; 62 global.gc(); 63 console.log(`done/collected/total: ${done}/${countGC}/${count}`); 64 if (countGC === count) { 65 server.close(); 66 } else { 67 setImmediate(status); 68 } 69 } else { 70 setImmediate(status); 71 } 72} 73