diff --git a/lib/net.js b/lib/net.js index c5ff6182989efd..df68be4067c481 100644 --- a/lib/net.js +++ b/lib/net.js @@ -368,8 +368,8 @@ Socket.prototype._final = function(cb) { }; -function afterShutdown(status, handle) { - var self = handle[owner_symbol]; +function afterShutdown(status) { + var self = this.handle[owner_symbol]; debug('afterShutdown destroyed=%j', self.destroyed, self._readableState); diff --git a/test/parallel/test-tls-close-event-after-write.js b/test/parallel/test-tls-close-event-after-write.js new file mode 100644 index 00000000000000..31ebc897b14758 --- /dev/null +++ b/test/parallel/test-tls-close-event-after-write.js @@ -0,0 +1,41 @@ +'use strict'; +const common = require('../common'); + +if (!common.hasCrypto) + common.skip('missing crypto'); + +// Issue #24984 +// 'close' event isn't emitted on a TLS connection if it's been written to +// (but 'end' and 'finish' events are). Without a fix, this test won't exit. + +const tls = require('tls'); +const fixtures = require('../common/fixtures'); +let cconn = null; +let sconn = null; + +function test() { + if (cconn && sconn) { + cconn.resume(); + sconn.resume(); + sconn.end(Buffer.alloc(1024 * 1024)); + cconn.end(); + } +} + +const server = tls.createServer({ + key: fixtures.readKey('agent1-key.pem'), + cert: fixtures.readKey('agent1-cert.pem') +}, function(c) { + c.on('close', function() { + server.close(); + }); + sconn = c; + test(); +}).listen(0, common.mustCall(function() { + tls.connect(this.address().port, { + rejectUnauthorized: false + }, common.mustCall(function() { + cconn = this; + test(); + })); +}));