From c14aa07b94d684de8e2a23a54d0e6a3c25a2e460 Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Thu, 7 Mar 2019 12:22:36 +0100 Subject: [PATCH] net: use kHandle symbol for accessing native handle Use a common `kHandle` for all `StreamBase`-based streams. PR-URL: https://github.com/nodejs/node/pull/26491 Reviewed-By: Colin Ihrig Reviewed-By: Joyee Cheung Reviewed-By: Sam Roberts Reviewed-By: James M Snell Reviewed-By: Luigi Pinca Reviewed-By: Ruben Bridgewater --- lib/internal/http2/core.js | 12 +++++------- lib/internal/stream_base_commons.js | 10 ++++++++-- lib/net.js | 15 ++++++++++----- 3 files changed, 23 insertions(+), 14 deletions(-) diff --git a/lib/internal/http2/core.js b/lib/internal/http2/core.js index 8a83f083fe28bf..0e795d5aa1e397 100644 --- a/lib/internal/http2/core.js +++ b/lib/internal/http2/core.js @@ -106,13 +106,13 @@ const { updateSettingsBuffer } = require('internal/http2/util'); const { - createWriteWrap, writeGeneric, writevGeneric, onStreamRead, kAfterAsyncWrite, kMaybeDestroy, - kUpdateTimer + kUpdateTimer, + kHandle } = require('internal/stream_base_commons'); const { kTimeout, @@ -151,7 +151,6 @@ const TLSServer = tls.Server; const kAlpnProtocol = Symbol('alpnProtocol'); const kAuthority = Symbol('authority'); const kEncrypted = Symbol('encrypted'); -const kHandle = Symbol('handle'); const kID = Symbol('id'); const kInit = Symbol('init'); const kInfoHeaders = Symbol('sent-info-headers'); @@ -1798,13 +1797,12 @@ class Http2Stream extends Duplex { if (!this.headersSent) this[kProceed](); - const req = createWriteWrap(this[kHandle]); - req.stream = this[kID]; + let req; if (writev) - writevGeneric(this, req, data, cb); + req = writevGeneric(this, data, cb); else - writeGeneric(this, req, data, encoding, cb); + req = writeGeneric(this, data, encoding, cb); trackWriteState(this, req.bytes); } diff --git a/lib/internal/stream_base_commons.js b/lib/internal/stream_base_commons.js index 9c3b60e584c033..4f52553692a402 100644 --- a/lib/internal/stream_base_commons.js +++ b/lib/internal/stream_base_commons.js @@ -17,6 +17,7 @@ const { owner_symbol } = require('internal/async_hooks').symbols; const kMaybeDestroy = Symbol('kMaybeDestroy'); const kUpdateTimer = Symbol('kUpdateTimer'); const kAfterAsyncWrite = Symbol('kAfterAsyncWrite'); +const kHandle = Symbol('kHandle'); function handleWriteReq(req, data, encoding) { const { handle } = req; @@ -87,7 +88,8 @@ function createWriteWrap(handle) { return req; } -function writevGeneric(self, req, data, cb) { +function writevGeneric(self, data, cb) { + const req = createWriteWrap(self[kHandle]); var allBuffers = data.allBuffers; var chunks; var i; @@ -109,12 +111,15 @@ function writevGeneric(self, req, data, cb) { if (err === 0) req._chunks = chunks; afterWriteDispatched(self, req, err, cb); + return req; } -function writeGeneric(self, req, data, encoding, cb) { +function writeGeneric(self, data, encoding, cb) { + const req = createWriteWrap(self[kHandle]); var err = handleWriteReq(req, data, encoding); afterWriteDispatched(self, req, err, cb); + return req; } function afterWriteDispatched(self, req, err, cb) { @@ -186,4 +191,5 @@ module.exports = { kAfterAsyncWrite, kMaybeDestroy, kUpdateTimer, + kHandle }; diff --git a/lib/net.js b/lib/net.js index 2af6fedfd39d6d..4aac5fa75a8c84 100644 --- a/lib/net.js +++ b/lib/net.js @@ -58,11 +58,11 @@ const { symbols: { async_id_symbol, owner_symbol } } = require('internal/async_hooks'); const { - createWriteWrap, writevGeneric, writeGeneric, onStreamRead, kAfterAsyncWrite, + kHandle, kUpdateTimer } = require('internal/stream_base_commons'); const { @@ -236,7 +236,7 @@ function Socket(options) { // probably be supplied by async_hooks. this[async_id_symbol] = -1; this._hadError = false; - this._handle = null; + this[kHandle] = null; this._parent = null; this._host = null; this[kLastWriteQueueSize] = 0; @@ -714,11 +714,11 @@ Socket.prototype._writeGeneric = function(writev, data, encoding, cb) { this._unrefTimer(); - var req = createWriteWrap(this._handle); + let req; if (writev) - writevGeneric(this, req, data, cb); + req = writevGeneric(this, data, cb); else - writeGeneric(this, req, data, encoding, cb); + req = writeGeneric(this, data, encoding, cb); if (req.async) this[kLastWriteQueueSize] = req.bytes; }; @@ -1608,6 +1608,11 @@ Object.defineProperty(TCP.prototype, 'owner', { set(v) { return this[owner_symbol] = v; } }); +Object.defineProperty(Socket.prototype, '_handle', { + get() { return this[kHandle]; }, + set(v) { return this[kHandle] = v; } +}); + Server.prototype.listenFD = internalUtil.deprecate(function(fd, type) { return this.listen({ fd: fd });