Philippe Vaucher provided a brilliant piece of test code that show a problem
authorDaniel Stenberg <daniel@haxx.se>
Tue, 7 Feb 2006 23:09:04 +0000 (23:09 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Tue, 7 Feb 2006 23:09:04 +0000 (23:09 +0000)
with re-used FTP connections. If the second request on the same connection was
set not to fetch a "body", libcurl could get confused and consider it an
attempt to use a dead connection and would go acting mighty strange.

CHANGES
RELEASE-NOTES
lib/transfer.c

diff --git a/CHANGES b/CHANGES
index bcb0cf8..d832e81 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -6,6 +6,12 @@
 
                                   Changelog
 
+Daniel (8 February 2006)
+- Philippe Vaucher provided a brilliant piece of test code that show a problem
+  with re-used FTP connections. If the second request on the same connection
+  was set not to fetch a "body", libcurl could get confused and consider it an
+  attempt to use a dead connection and would go acting mighty strange.
+
 Daniel (2 February 2006)
 - Make --limit-rate [num] mean bytes. It used to be that but it broke in my
   change done in November 2005.
@@ -18,8 +24,7 @@ Daniel (30 January 2006)
 - Based on an error report by Philippe Vaucher, we no longer count a retried
   connection setup as a follow-redirect. It turns out 1) this fails when a FTP
   connection is re-setup and 2) it does make the max-redirs counter behave
-  wrong. This fix was not verified since the reporter vanished, but I believe
-  this is the right fix nonetheless.
+  wrong.
 
 Daniel (24 January 2006)
 - Michal Marek provided a patch for FTP that makes libcurl continue to try
index 899f366..9c9c7a6 100644 (file)
@@ -20,6 +20,7 @@ This release includes the following changes:
 
 This release includes the following bugfixes:
 
+ o re-used FTP connections when the second request didn't do a transfer
  o plain --limit-rate [num] means bytes
  o re-creating a dead connection is no longer counted internally as a followed
    redirect and thus prevents a weird error that would occur if a FTP
@@ -49,6 +50,7 @@ Other curl-related news since the previous public release:
  o http://curl.s-lines.net/ is a new curl web mirror in Japan
  o http://curl.oss-mirror.org/ is a new curl web mirror in Ireland
  o http://curl.linux-mirror.org/ is a new curl web mirror in Germany
+ o pycurl 7.15.1 was released: http://pycurl.sf.net/
  o TclCurl 0.15.1 was released:
    http://personal1.iddeo.es/andresgarci/tclcurl/english/
 
index 18f8f11..50a8bae 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2005, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2006, Daniel Stenberg, <daniel@haxx.se>, et al.
  *
  * This software is licensed as described in the file COPYING, which
  * you should have received as part of this distribution. The terms
@@ -2100,11 +2100,12 @@ bool Curl_retry_request(struct connectdata *conn,
   bool retry = FALSE;
 
   if((conn->keep.bytecount+conn->headerbytecount == 0) &&
-     conn->bits.reuse) {
-    /* We got no data and we attempted to re-use a connection. This might
-       happen if the connection was left alive when we were done using it
-       before, but that was closed when we wanted to read from it again. Bad
-       luck. Retry the same request on a fresh connect! */
+     conn->bits.reuse &&
+     !conn->bits.no_body) {
+    /* We got no data, we attempted to re-use a connection and yet we want a
+       "body". This might happen if the connection was left alive when we were
+       done using it before, but that was closed when we wanted to read from
+       it again. Bad luck. Retry the same request on a fresh connect! */
     infof(conn->data, "Connection died, retrying a fresh connect\n");
     *url = strdup(conn->data->change.url);