From f96a86cac583675d10f601316c6ec4803bb851cc Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Wed, 6 Dec 2017 05:29:29 +0100 Subject: tls: unconsume stream on destroy When the TLS stream is destroyed for whatever reason, we should unset all callbacks on the underlying transport stream. PR-URL: https://github.com/nodejs/node/pull/17478 Fixes: https://github.com/nodejs/node/issues/17475 Reviewed-By: Fedor Indutny Reviewed-By: Jan Krems Reviewed-By: Matteo Collina Reviewed-By: James M Snell --- .../test-tls-transport-destroy-after-own-gc.js | 30 ++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 test/parallel/test-tls-transport-destroy-after-own-gc.js (limited to 'test') diff --git a/test/parallel/test-tls-transport-destroy-after-own-gc.js b/test/parallel/test-tls-transport-destroy-after-own-gc.js new file mode 100644 index 0000000000..46f630982a --- /dev/null +++ b/test/parallel/test-tls-transport-destroy-after-own-gc.js @@ -0,0 +1,30 @@ +// Flags: --expose-gc +'use strict'; + +// Regression test for https://github.com/nodejs/node/issues/17475 +// Unfortunately, this tests only "works" reliably when checked with valgrind or +// a similar tool. + +const common = require('../common'); +if (!common.hasCrypto) + common.skip('missing crypto'); + +const { TLSSocket } = require('tls'); +const makeDuplexPair = require('../common/duplexpair'); + +let { clientSide } = makeDuplexPair(); + +let clientTLS = new TLSSocket(clientSide, { isServer: false }); +// eslint-disable-next-line no-unused-vars +let clientTLSHandle = clientTLS._handle; + +setImmediate(() => { + clientTLS = null; + global.gc(); + clientTLSHandle = null; + global.gc(); + setImmediate(() => { + clientSide = null; + global.gc(); + }); +}); -- cgit v1.2.1