mirror of https://github.com/lukechilds/node.git
Browse Source
This is a two-part fix: - Fix pending data notification in `OutgoingMessage` to notify server about flushed data too - Fix pause/resume behavior for the consumed socket. `resume` event is emitted on a next tick, and `socket._paused` can already be `true` at this time. Pause the socket again to avoid PAUSED error on parser. Fix: https://github.com/nodejs/node/issues/3332 PR-URL: https://github.com/nodejs/node/pull/3342 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Trevor Norris <trev.norris@gmail.com>v4.x
committed by
James M Snell
5 changed files with 120 additions and 47 deletions
@ -0,0 +1,41 @@ |
|||||
|
'use strict'; |
||||
|
const common = require('../common'); |
||||
|
const assert = require('assert'); |
||||
|
const http = require('http'); |
||||
|
const net = require('net'); |
||||
|
|
||||
|
const big = new Buffer(16 * 1024); |
||||
|
big.fill('A'); |
||||
|
|
||||
|
const COUNT = 1e4; |
||||
|
|
||||
|
var received = 0; |
||||
|
|
||||
|
var client; |
||||
|
const server = http.createServer(function(req, res) { |
||||
|
res.end(big, function() { |
||||
|
if (++received === COUNT) { |
||||
|
server.close(); |
||||
|
client.end(); |
||||
|
} |
||||
|
}); |
||||
|
}).listen(common.PORT, function() { |
||||
|
var req = new Array(COUNT + 1).join('GET / HTTP/1.1\r\n\r\n'); |
||||
|
client = net.connect(common.PORT, function() { |
||||
|
client.write(req); |
||||
|
}); |
||||
|
|
||||
|
// Just let the test terminate instead of hanging
|
||||
|
client.on('close', function() { |
||||
|
if (received !== COUNT) |
||||
|
server.close(); |
||||
|
}); |
||||
|
client.resume(); |
||||
|
}); |
||||
|
|
||||
|
process.on('exit', function() { |
||||
|
// The server should pause connection on pipeline flood, but it shoul still
|
||||
|
// resume it and finish processing the requests, when its output queue will
|
||||
|
// be empty again.
|
||||
|
assert.equal(received, COUNT); |
||||
|
}); |
Loading…
Reference in new issue