Browse Source

zlib: only apply drain listener if given callback

When stream.flush() is called without a callback, an empty listener is
being added. Since flush may be called multiple times to push SSE's
down to the client, multiple noop listeners are being added. This in
turn causes the memory leak detected message.

PR-URL: https://github.com/nodejs/node/pull/3534
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: James M Snell <jasnell@gmail.com>
v5.x
Craig Cavalier 9 years ago
committed by Jeremiah Senkpiel
parent
commit
33ffc62670
  1. 7
      lib/zlib.js

7
lib/zlib.js

@ -444,10 +444,9 @@ Zlib.prototype.flush = function(kind, callback) {
if (callback) if (callback)
this.once('end', callback); this.once('end', callback);
} else if (ws.needDrain) { } else if (ws.needDrain) {
var self = this; if (callback) {
this.once('drain', function() { this.once('drain', () => this.flush(kind, callback));
self.flush(kind, callback); }
});
} else { } else {
this._flushFlag = kind; this._flushFlag = kind;
this.write(new Buffer(0), '', callback); this.write(new Buffer(0), '', callback);

Loading…
Cancel
Save