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').availableParallelism(); 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'); 18const numRequests = 36; 19let createClients = true; 20let done = 0; 21let count = 0; 22let countGC = 0; 23 24const server = http.createServer(serverHandler); 25server.listen(0, common.mustCall(() => { 26 for (let i = 0; i < cpus; i++) 27 getAll(numRequests); 28})); 29 30function getAll(requestsRemaining) { 31 if (!createClients) 32 return; 33 34 if (requestsRemaining <= 0) 35 return; 36 37 const req = http.get({ 38 hostname: 'localhost', 39 pathname: '/', 40 port: server.address().port 41 }, cb).on('error', onerror); 42 43 count++; 44 onGC(req, { ongc }); 45 46 setImmediate(getAll, requestsRemaining - 1); 47} 48 49function cb(res) { 50 res.resume(); 51 done++; 52} 53 54function onerror(err) { 55 throw err; 56} 57 58function ongc() { 59 countGC++; 60} 61 62setImmediate(status); 63 64function status() { 65 if (done > 0) { 66 createClients = false; 67 global.gc(); 68 console.log(`done/collected/total: ${done}/${countGC}/${count}`); 69 if (countGC === count) { 70 server.close(); 71 } else { 72 setImmediate(status); 73 } 74 } else { 75 setImmediate(status); 76 } 77} 78