'use strict';
// Flags: --expose-gc

// Regression test for https://github.com/nodejs/node/issues/8251.
const common = require('../common');
const net = require('net');

const data = Buffer.alloc(1000000).toString('hex');

const server = net.createServer(common.mustCall(function(conn) {
  conn.resume();
})).listen(0, common.mustCall(function() {
  const conn = net.createConnection(this.address().port, common.mustCall(() => {
    let count = 0;

    function writeLoop() {
      if (count++ === 20) {
        conn.destroy();
        server.close();
        return;
      }

      while (conn.write(data, 'hex'));
      global.gc(true);
      // The buffer allocated inside the .write() call should still be alive.
    }

    conn.on('drain', writeLoop);

    writeLoop();
  }));
}));
