summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/net.js4
-rw-r--r--test/parallel/test-tls-close-event-after-write.js41
2 files changed, 43 insertions, 2 deletions
diff --git a/lib/net.js b/lib/net.js
index af939754a5..0577dd3c9f 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 0000000000..31ebc897b1
--- /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();
+ }));
+}));