diff --git a/lib/http.js b/lib/http.js index 4f9d61203d0..3bb24cbef77 100644 --- a/lib/http.js +++ b/lib/http.js @@ -1152,12 +1152,6 @@ Agent.prototype.appendMessage = function(options) { this.queue.push(req); req._queue = this.queue; - /* - req.on('finish', function () { - self._cycle(); - }); - */ - this._cycle(); return req; @@ -1374,8 +1368,6 @@ Agent.prototype._cycle = function() { var first = this.queue[0]; if (!first) return; - var haveConnectingSocket = false; - // First try to find an available socket. for (var i = 0; i < this.sockets.length; i++) { var socket = this.sockets[i]; @@ -1395,13 +1387,11 @@ Agent.prototype._cycle = function() { self._cycle(); // try to dispatch another return; } - - if (socket._httpConnecting) haveConnectingSocket = true; } // If no sockets are connecting, and we have space for another we should // be starting a new connection to handle this request. - if (!haveConnectingSocket && this.sockets.length < this.maxSockets) { + if (this.sockets.length < this.maxSockets) { this._establishNewConnection(); } diff --git a/test/simple/test-regress-GH-877.js b/test/simple/test-regress-GH-877.js new file mode 100644 index 00000000000..6aa5d59b327 --- /dev/null +++ b/test/simple/test-regress-GH-877.js @@ -0,0 +1,49 @@ +var common = require('../common'); +var http = require('http'); +var assert = require('assert'); + +var N = 20; +var responses = 0; +var maxQueued = 0; + +debugger; + +var agent = http.getAgent('127.0.0.1', common.PORT); +agent.maxSockets = 10; + +var server = http.createServer(function (req, res) { + res.writeHead(200); + res.end('Hello World\n'); +}); + +server.listen(common.PORT, "127.0.0.1", function() { + for (var i = 0; i < N; i++) { + var options = { + host: '127.0.0.1', + port: common.PORT, + }; + + debugger; + + var req = http.get(options, function(res) { + if (++responses == N) { + server.close(); + } + }); + + assert.equal(req.agent, agent); + + console.log('Socket: ' + agent.sockets.length + + '/' + agent.maxSockets + + ' queued: '+ agent.queue.length); + + if (maxQueued < agent.queue.length) { + maxQueued = agent.queue.length; + } + } +}); + +process.on('exit', function() { + assert.ok(responses == N); + assert.ok(maxQueued <= 10); +});