diff options
author | Mathias Buus <mathiasbuus@gmail.com> | 2018-08-30 03:23:41 +0200 |
---|---|---|
committer | Anna Henningsen <anna@addaleax.net> | 2018-09-02 12:48:35 +0200 |
commit | 1287e524eeba4632decce231da161426efb8fc34 (patch) | |
tree | 2af8ae543babcefde5c8a204c5727e9e876acee8 | |
parent | ec75ba6f0a99c2549e21026904a35f236808638d (diff) | |
download | android-node-v8-1287e524eeba4632decce231da161426efb8fc34.tar.gz android-node-v8-1287e524eeba4632decce231da161426efb8fc34.tar.bz2 android-node-v8-1287e524eeba4632decce231da161426efb8fc34.zip |
src: fix external memory usage going negative
PR-URL: https://github.com/nodejs/node/pull/22594
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Tiancheng "Timothy" Gu <timothygu99@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Tobias Nießen <tniessen@tnie.de>
-rw-r--r-- | src/node_crypto.h | 4 | ||||
-rw-r--r-- | test/parallel/test-gc-tls-external-memory.js | 35 |
2 files changed, 38 insertions, 1 deletions
diff --git a/src/node_crypto.h b/src/node_crypto.h index 269bccbc03..692978412f 100644 --- a/src/node_crypto.h +++ b/src/node_crypto.h @@ -198,7 +198,9 @@ class SecureContext : public BaseObject { } inline void Reset() { - env()->isolate()->AdjustAmountOfExternalAllocatedMemory(-kExternalSize); + if (ctx_ != nullptr) { + env()->isolate()->AdjustAmountOfExternalAllocatedMemory(-kExternalSize); + } ctx_.reset(); cert_.reset(); issuer_.reset(); diff --git a/test/parallel/test-gc-tls-external-memory.js b/test/parallel/test-gc-tls-external-memory.js new file mode 100644 index 0000000000..c19fbbe508 --- /dev/null +++ b/test/parallel/test-gc-tls-external-memory.js @@ -0,0 +1,35 @@ +'use strict'; +// Flags: --expose-gc + +// Tests that memoryUsage().external doesn't go negative +// when a lot tls connections are opened and closed + +const common = require('../common'); +if (!common.hasCrypto) + common.skip('missing crypto'); + +const assert = require('assert'); +const net = require('net'); +const tls = require('tls'); + +// Payload doesn't matter. We just need to have the tls +// connection try and connect somewhere. +const yolo = Buffer.alloc(10000).fill('yolo'); +const server = net.createServer(function(socket) { + socket.write(yolo); +}); + +server.listen(0, common.mustCall(function() { + const { port } = server.address(); + let runs = 0; + connect(); + + function connect() { + global.gc(); + assert(process.memoryUsage().external >= 0); + if (runs++ < 512) + tls.connect(port).on('error', connect); + else + server.close(); + } +})); |