summaryrefslogtreecommitdiff
path: root/lib/_http_agent.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/_http_agent.js')
-rw-r--r--lib/_http_agent.js14
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