summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYihong Wang <yh.wang@ibm.com>2017-05-27 17:14:09 -0700
committerMatteo Collina <hello@matteocollina.com>2017-05-31 10:39:17 +0200
commit716e9e07fd9d936380553d512e8a8abe21caa4f9 (patch)
tree85ff03698dc2646e04387bffd622790c860f21da
parentfd54b10500724a7f59f448635f2ec96759495339 (diff)
downloadandroid-node-v8-716e9e07fd9d936380553d512e8a8abe21caa4f9.tar.gz
android-node-v8-716e9e07fd9d936380553d512e8a8abe21caa4f9.tar.bz2
android-node-v8-716e9e07fd9d936380553d512e8a8abe21caa4f9.zip
http: suppress data event if req aborted
Re-enable test-http-abort-stream-end and put it into parallel category. Use system random port when calling server.listen() and fix eslint errors. After calling request.abort(), in order to avoid the buffered data to trigger the 'data' event, explicitly remove 'data' event listeners. PR-URL: https://github.com/nodejs/node/pull/13260 Reviewed-By: Brian White <mscdex@mscdex.net> Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
-rw-r--r--lib/_http_incoming.js3
-rw-r--r--test/parallel/test-http-abort-stream-end.js (renamed from test/disabled/test-http-abort-stream-end.js)18
2 files changed, 11 insertions, 10 deletions
diff --git a/lib/_http_incoming.js b/lib/_http_incoming.js
index 9151836ad8..6e5aff1cc9 100644
--- a/lib/_http_incoming.js
+++ b/lib/_http_incoming.js
@@ -314,6 +314,9 @@ function _addHeaderLine(field, value, dest) {
IncomingMessage.prototype._dump = function _dump() {
if (!this._dumped) {
this._dumped = true;
+ // If there is buffered data, it may trigger 'data' events.
+ // Remove 'data' event listeners explicitly.
+ this.removeAllListeners('data');
this.resume();
}
};
diff --git a/test/disabled/test-http-abort-stream-end.js b/test/parallel/test-http-abort-stream-end.js
index f754e60300..8f89aeffff 100644
--- a/test/disabled/test-http-abort-stream-end.js
+++ b/test/parallel/test-http-abort-stream-end.js
@@ -20,27 +20,27 @@
// USE OR OTHER DEALINGS IN THE SOFTWARE.
'use strict';
-const common = require('../common');
+require('../common');
const assert = require('assert');
const http = require('http');
-var maxSize = 1024;
-var size = 0;
+const maxSize = 1024;
+let size = 0;
-var s = http.createServer(function(req, res) {
+const s = http.createServer(function(req, res) {
this.close();
res.writeHead(200, {'Content-Type': 'text/plain'});
- for (var i = 0; i < maxSize; i++) {
+ for (let i = 0; i < maxSize; i++) {
res.write('x' + i);
}
res.end();
});
-var aborted = false;
-s.listen(common.PORT, function() {
- var req = http.get('http://localhost:' + common.PORT, function(res) {
+let aborted = false;
+s.listen(0, function() {
+ const req = http.get('http://localhost:' + s.address().port, function(res) {
res.on('data', function(chunk) {
size += chunk.length;
assert(!aborted, 'got data after abort');
@@ -51,8 +51,6 @@ s.listen(common.PORT, function() {
}
});
});
-
- req.end();
});
process.on('exit', function() {