From 09c592bf4e8c149277f4c9ba47be6089db845736 Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Sun, 30 Sep 2018 16:24:36 -0400 Subject: [PATCH] zlib: move, rename, document internal `params()` cb Give the callback a more specific name, explain what it does and why it is necessary, and move it to a location much closer to its use site. --- lib/zlib.js | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/lib/zlib.js b/lib/zlib.js index 87e8641767669f..6fb7696849529d 100644 --- a/lib/zlib.js +++ b/lib/zlib.js @@ -156,17 +156,6 @@ function zlibOnError(message, errno) { self.emit('error', error); } -function flushCallback(level, strategy, callback) { - if (!this._handle) - assert(false, 'zlib binding closed'); - this._handle.params(level, strategy); - if (!this._hadError) { - this._level = level; - this._strategy = strategy; - if (callback) callback(); - } -} - // 1. Returns false for undefined and NaN // 2. Returns true for finite numbers // 3. Throws ERR_INVALID_ARG_TYPE for non-numbers @@ -352,13 +341,28 @@ Object.defineProperty(Zlib.prototype, 'bytesRead', { } }); +// This callback is used by `.params()` to wait until a full flush happened +// before adjusting the parameters. In particular, the call to the native +// `params()` function should not happen while a write is currently in progress +// on the threadpool. +function paramsAfterFlushCallback(level, strategy, callback) { + if (!this._handle) + assert(false, 'zlib binding closed'); + this._handle.params(level, strategy); + if (!this._hadError) { + this._level = level; + this._strategy = strategy; + if (callback) callback(); + } +} + Zlib.prototype.params = function params(level, strategy, callback) { checkRangesOrGetDefault(level, 'level', Z_MIN_LEVEL, Z_MAX_LEVEL); checkRangesOrGetDefault(strategy, 'strategy', Z_DEFAULT_STRATEGY, Z_FIXED); if (this._level !== level || this._strategy !== strategy) { this.flush(Z_SYNC_FLUSH, - flushCallback.bind(this, level, strategy, callback)); + paramsAfterFlushCallback.bind(this, level, strategy, callback)); } else { process.nextTick(callback); }