mirror of https://github.com/lukechilds/node.git
Browse Source
Asynchronous functions in `zlib` should not emit the close event. This fixes an issue where asynchronous calls in a for loop could exhaust memory because the pending event prevents the objects from being garbage collected. Fixes: https://github.com/nodejs/node/issues/1668 PR-URL: https://github.com/nodejs/node/pull/5707 Reviewed-By: jasnell - James M Snell <jasnell@gmail.com> Reviewed-By: trevnorris - Trevor Norris <trev.norris@gmail.com> Reviewed-By: Сковорода Никита Андреевич <chalkerx@gmail.com>process-exit-stdio-flushing
Rich Trott
9 years ago
2 changed files with 32 additions and 8 deletions
@ -0,0 +1,21 @@ |
|||
'use strict'; |
|||
require('../common'); |
|||
const zlib = require('zlib'); |
|||
const assert = require('assert'); |
|||
|
|||
const shouldNotBeCalled = () => { throw new Error('unexpected event'); }; |
|||
|
|||
const message = 'Come on, Fhqwhgads.'; |
|||
|
|||
const zipper = new zlib.Gzip(); |
|||
zipper.on('close', shouldNotBeCalled); |
|||
|
|||
const buffer = new Buffer(message); |
|||
const zipped = zipper._processChunk(buffer, zlib.Z_FINISH); |
|||
|
|||
const unzipper = new zlib.Gunzip(); |
|||
unzipper.on('close', shouldNotBeCalled); |
|||
|
|||
const unzipped = unzipper._processChunk(zipped, zlib.Z_FINISH); |
|||
assert.notEqual(zipped.toString(), message); |
|||
assert.strictEqual(unzipped.toString(), message); |
Loading…
Reference in new issue