zlib: use common owner symbol to access JS wrapper

Use the same symbol that other `AsyncWrap` instances also use
for accessing the JS wrapper.

PR-URL: https://github.com/nodejs/node/pull/23189
Reviewed-By: Daniel Bevenius <daniel.bevenius@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Tiancheng "Timothy" Gu <timothygu99@gmail.com>
This commit is contained in:
Anna Henningsen 2018-09-30 21:08:12 -04:00
parent 4f0971d366
commit a9bb653ecc
No known key found for this signature in database
GPG Key ID: 9C63F3A6CD2AD8F9

View File

@ -42,6 +42,7 @@ const {
Buffer, Buffer,
kMaxLength kMaxLength
} = require('buffer'); } = require('buffer');
const { owner_symbol } = require('internal/async_hooks').symbols;
const constants = process.binding('constants').zlib; const constants = process.binding('constants').zlib;
const { const {
@ -143,7 +144,7 @@ function zlibBufferSync(engine, buffer) {
} }
function zlibOnError(message, errno) { function zlibOnError(message, errno) {
var self = this.jsref; var self = this[owner_symbol];
// there is no way to cleanly recover. // there is no way to cleanly recover.
// continuing only obscures problems. // continuing only obscures problems.
_close(self); _close(self);
@ -289,7 +290,8 @@ function Zlib(opts, mode) {
Transform.call(this, opts); Transform.call(this, opts);
this.bytesWritten = 0; this.bytesWritten = 0;
this._handle = new binding.Zlib(mode); this._handle = new binding.Zlib(mode);
this._handle.jsref = this; // Used by processCallback() and zlibOnError() // Used by processCallback() and zlibOnError()
this._handle[owner_symbol] = this;
this._handle.onerror = zlibOnError; this._handle.onerror = zlibOnError;
this._hadError = false; this._hadError = false;
this._writeState = new Uint32Array(2); this._writeState = new Uint32Array(2);
@ -717,6 +719,13 @@ function createProperty(ctor) {
}; };
} }
// Legacy alias on the C++ wrapper object. This is not public API, so we may
// want to runtime-deprecate it at some point. There's no hurry, though.
Object.defineProperty(binding.Zlib.prototype, 'jsref', {
get() { return this[owner_symbol]; },
set(v) { return this[owner_symbol] = v; }
});
module.exports = { module.exports = {
Deflate, Deflate,
Inflate, Inflate,