• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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