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