summaryrefslogtreecommitdiff
path: root/test/parallel/test-tls-securepair-leak.js
diff options
context:
space:
mode:
authorBen Noordhuis <info@bnoordhuis.nl>2017-03-17 11:35:28 +0100
committerJames M Snell <jasnell@gmail.com>2017-03-22 09:41:04 -0700
commit86d74a248bf82a862104ba2dc63ebc573fd69a4f (patch)
treea9b815983e423c0ec69145891a60105778a3f125 /test/parallel/test-tls-securepair-leak.js
parentbe98f2691736e10053b9826fce42b0ab50604da7 (diff)
downloadnode-new-86d74a248bf82a862104ba2dc63ebc573fd69a4f.tar.gz
tls: fix SecurePair external memory reporting
Ensure that AdjustAmountOfExternalAllocatedMemory() is called when the SecurePair is destroyed. Not doing so is not an actual memory leak but it makes `process.memoryUsage().external` wildly inaccurate and can cause performance problems due to excessive garbage collection. PR-URL: https://github.com/nodejs/node/pull/11896 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net>
Diffstat (limited to 'test/parallel/test-tls-securepair-leak.js')
-rw-r--r--test/parallel/test-tls-securepair-leak.js29
1 files changed, 29 insertions, 0 deletions
diff --git a/test/parallel/test-tls-securepair-leak.js b/test/parallel/test-tls-securepair-leak.js
new file mode 100644
index 0000000000..b513bcd4c7
--- /dev/null
+++ b/test/parallel/test-tls-securepair-leak.js
@@ -0,0 +1,29 @@
+// Flags: --expose-gc --no-deprecation
+'use strict';
+
+const common = require('../common');
+const assert = require('assert');
+
+if (!common.hasCrypto) {
+ common.skip('missing crypto');
+ return;
+}
+
+const { createSecureContext } = require('tls');
+const { createSecurePair } = require('_tls_legacy');
+
+const before = process.memoryUsage().external;
+{
+ const context = createSecureContext();
+ const options = {};
+ for (let i = 0; i < 1e4; i += 1)
+ createSecurePair(context, false, false, false, options).destroy();
+}
+global.gc();
+const after = process.memoryUsage().external;
+
+// It's not an exact science but a SecurePair grows .external by about 45 kB.
+// Unless AdjustAmountOfExternalAllocatedMemory() is called on destruction,
+// 10,000 instances make it grow by well over 400 MB. Allow for some slop
+// because objects like buffers also affect the external limit.
+assert(after - before < 25 << 20);