diff --git a/src/node_zlib.cc b/src/node_zlib.cc index de8b0335892f65..8e30241f4e6d45 100644 --- a/src/node_zlib.cc +++ b/src/node_zlib.cc @@ -90,6 +90,7 @@ class ZCtx : public AsyncWrap, public ThreadPoolWork { refs_(0), gzip_id_bytes_read_(0), write_result_(nullptr) { + MakeWeak(); } diff --git a/test/parallel/test-zlib-unused-weak.js b/test/parallel/test-zlib-unused-weak.js new file mode 100644 index 00000000000000..7a5a6728533e18 --- /dev/null +++ b/test/parallel/test-zlib-unused-weak.js @@ -0,0 +1,18 @@ +'use strict'; +// Flags: --expose-gc +require('../common'); +const assert = require('assert'); +const zlib = require('zlib'); + +// Tests that native zlib handles start out their life as weak handles. + +const before = process.memoryUsage().external; +for (let i = 0; i < 100; ++i) + zlib.createGzip(); +const afterCreation = process.memoryUsage().external; +global.gc(); +const afterGC = process.memoryUsage().external; + +assert((afterGC - before) / (afterCreation - before) <= 0.05, + `Expected after-GC delta ${afterGC - before} to be less than 5 %` + + ` of before-GC delta ${afterCreation - before}`);