diff options
Diffstat (limited to 'lib/_http_agent.js')
-rw-r--r-- | lib/_http_agent.js | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/lib/_http_agent.js b/lib/_http_agent.js index eb98f2b0bd..12f8529c38 100644 --- a/lib/_http_agent.js +++ b/lib/_http_agent.js @@ -40,6 +40,13 @@ const { async_id_symbol } = require('internal/async_hooks').symbols; // ClientRequest.onSocket(). The Agent is now *strictly* // concerned with managing a connection pool. +class ReusedHandle { + constructor(type, handle) { + this.type = type; + this.handle = handle; + } +} + function Agent(options) { if (!(this instanceof Agent)) return new Agent(options); @@ -166,10 +173,11 @@ Agent.prototype.addRequest = function addRequest(req, options, port/* legacy */, // We have a free socket, so use that. var socket = this.freeSockets[name].shift(); // Guard against an uninitialized or user supplied Socket. - if (socket._handle && typeof socket._handle.asyncReset === 'function') { + const handle = socket._handle; + if (handle && typeof handle.asyncReset === 'function') { // Assign the handle a new asyncId and run any destroy()/init() hooks. - socket._handle.asyncReset(); - socket[async_id_symbol] = socket._handle.getAsyncId(); + handle.asyncReset(new ReusedHandle(handle.getProviderType(), handle)); + socket[async_id_symbol] = handle.getAsyncId(); } // don't leak |