diff options
author | Ben Noordhuis <info@bnoordhuis.nl> | 2017-03-17 11:35:28 +0100 |
---|---|---|
committer | James M Snell <jasnell@gmail.com> | 2017-03-22 09:41:04 -0700 |
commit | 86d74a248bf82a862104ba2dc63ebc573fd69a4f (patch) | |
tree | a9b815983e423c0ec69145891a60105778a3f125 /test/parallel/test-tls-securepair-leak.js | |
parent | be98f2691736e10053b9826fce42b0ab50604da7 (diff) | |
download | node-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.js | 29 |
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); |