Don't encourage strange ideas about req race conditions
authorRyan Dahl <ry@tinyclouds.org>
Sun, 20 Jun 2010 18:54:51 +0000 (11:54 -0700)
committerRyan Dahl <ry@tinyclouds.org>
Sun, 20 Jun 2010 18:56:48 +0000 (11:56 -0700)
doc/api.markdown
test/pummel/test-http-client-reconnect-bug.js
test/simple/test-http-client-race-2.js
test/simple/test-http-client-race.js
test/simple/test-http-client-upload.js
test/simple/test-http-exceptions.js
test/simple/test-http-head-request.js
test/simple/test-http-proxy.js
test/simple/test-http.js

index 952c404..9a4fd02 100644 (file)
@@ -1866,6 +1866,7 @@ Example of connecting to `google.com`:
     var google = http.createClient(80, 'www.google.com');
     var request = google.request('GET', '/',
       {'host': 'www.google.com'});
+    request.end();
     request.addListener('response', function (response) {
       sys.puts('STATUS: ' + response.statusCode);
       sys.puts('HEADERS: ' + JSON.stringify(response.headers));
@@ -1874,7 +1875,6 @@ Example of connecting to `google.com`:
         sys.puts('BODY: ' + chunk);
       });
     });
-    request.end();
 
 
 ### http.createClient(port, host, secure, credentials)
index 2e963bb..a36a73f 100644 (file)
@@ -25,10 +25,10 @@ client.addListener("end", function() {
 });
 
 var request = client.request("GET", "/", {"host": "localhost"});
+request.end();
 request.addListener('response', function(response) {
   sys.puts("STATUS: " + response.statusCode);
 });
-request.end();
 
 setTimeout(function () {
   server.close();
index ba7a28b..4f8604e 100644 (file)
@@ -38,6 +38,7 @@ var body3 = "";
 // Client #1 is assigned Parser #1
 //
 var req1 = client.request("/1")
+req1.end();
 req1.addListener('response', function (res1) {
   res1.setBodyEncoding("utf8");
 
@@ -63,6 +64,7 @@ req1.addListener('response', function (res1) {
       // internal state of the parser was no longer valid for use by Client #1.
       //
       var req2 = client.request("/2");
+      req2.end();
       req2.addListener('response', function (res2) {
         res2.setBodyEncoding("utf8");
         res2.addListener('data', function (chunk) { body2 += chunk; });
@@ -73,19 +75,17 @@ req1.addListener('response', function (res1) {
           // request using client2.
           //
           var req3 = client2.request("/3");
+          req3.end();
           req3.addListener('response', function (res3) {
             res3.setBodyEncoding("utf8");
             res3.addListener('data', function (chunk) { body3 += chunk });
             res3.addListener('end', function() { server.close(); });
           });
-          req3.end();
         });
       });
-      req2.end();
     }, 500);
   });
 });
-req1.end();
 
 process.addListener("exit", function () {
   assert.equal(body1_s, body1);
index e669648..016feae 100644 (file)
@@ -20,6 +20,7 @@ var body1 = "";
 var body2 = "";
 
 var req1 = client.request("/1")
+req1.end();
 req1.addListener('response', function (res1) {
   res1.setBodyEncoding("utf8");
 
@@ -29,15 +30,14 @@ req1.addListener('response', function (res1) {
 
   res1.addListener('end', function () {
     var req2 = client.request("/2");
+    req2.end();
     req2.addListener('response', function (res2) {
       res2.setBodyEncoding("utf8");
       res2.addListener('data', function (chunk) { body2 += chunk; });
       res2.addListener('end', function () { server.close(); });
     });
-    req2.end();
   });
 });
-req1.end();
 
 process.addListener("exit", function () {
   assert.equal(body1_s, body1);
index bdc1f2d..82fd890 100644 (file)
@@ -26,7 +26,6 @@ server.listen(PORT);
 
 var client = http.createClient(PORT);
 var req = client.request('POST', '/');
-
 req.write('1\n');
 req.write('2\n');
 req.write('3\n');
index 042eedf..b373f8f 100644 (file)
@@ -28,6 +28,7 @@ function check_reqs() {
 
 function add_client(num) {
   var req = http.createClient(PORT).request('GET', '/busy/' + num);
+  req.end();
 
   req.addListener('response', function(res) {
     var response_body = "";
@@ -41,7 +42,6 @@ function add_client(num) {
       check_reqs();
     });
   });
-  req.end();
 
   return req;
 }
index f1f92a9..befc8a2 100644 (file)
@@ -19,6 +19,7 @@ var gotEnd = false;
 server.listen(PORT, function () {
   var client = http.createClient(PORT);
   var request = client.request("HEAD", "/");
+  request.end();
   request.addListener('response', function (response) {
     error('response start');
     response.addListener("end", function () {
@@ -26,7 +27,6 @@ server.listen(PORT, function () {
       gotEnd = true;
     });
   });
-  request.end();
 });
 
 process.addListener('exit', function () {
index 00ee3af..05f0c60 100644 (file)
@@ -16,6 +16,7 @@ var proxy_client = http.createClient(BACKEND_PORT);
 var proxy = http.createServer(function (req, res) {
   debug("proxy req headers: " + JSON.stringify(req.headers));
   var proxy_req = proxy_client.request(url.parse(req.url).pathname);
+  proxy_req.end();
   proxy_req.addListener('response', function(proxy_res) {
     res.writeHead(proxy_res.statusCode, proxy_res.headers);
     proxy_res.addListener("data", function(chunk) {
@@ -26,7 +27,6 @@ var proxy = http.createServer(function (req, res) {
       debug("proxy res");
     });
   });
-  proxy_req.end();
 });
 
 var body = "";
index 8aab058..f424a2d 100644 (file)
@@ -53,6 +53,7 @@ req.addListener('response', function (res) {
 
 setTimeout(function () {
   req = client.request("POST", "/world");
+  req.end();
   req.addListener('response',function (res) {
     assert.equal(200, res.statusCode);
     responses_recvd += 1;
@@ -60,7 +61,6 @@ setTimeout(function () {
     res.addListener('data', function (chunk) { body1 += chunk; });
     debug("Got /world response");
   });
-  req.end();
 }, 1);
 
 process.addListener("exit", function () {