]> granicus.if.org Git - curl/commitdiff
- Andreas Wurf and Markus Koetter helped me analyze a problem that Andreas got
authorDaniel Stenberg <daniel@haxx.se>
Wed, 19 Nov 2008 10:15:19 +0000 (10:15 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Wed, 19 Nov 2008 10:15:19 +0000 (10:15 +0000)
  when uploading files to a single FTP server using multiple easy handle
  handles with the multi interface. Occasionally a handle would stall in
  mysterious ways.

  The problem turned out to be a side-effect of the ConnectionExists()
  function's eagerness to re-use a handle for HTTP pipelining so it would
  select it even if already being in use, due to an inadequate check for its
  chances of being used for pipelnining.

CHANGES
RELEASE-NOTES
lib/url.c

diff --git a/CHANGES b/CHANGES
index b63249927284f5eb7356e78170ef6a400de970e0..bb93c2516cc24c136e5d279fce94356f98b3976f 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -6,6 +6,17 @@
 
                                   Changelog
 
+Daniel Stenberg (19 Nov 2008)
+- Andreas Wurf and Markus Koetter helped me analyze a problem that Andreas got
+  when uploading files to a single FTP server using multiple easy handle
+  handles with the multi interface. Occasionally a handle would stall in
+  mysterious ways.
+
+  The problem turned out to be a side-effect of the ConnectionExists()
+  function's eagerness to re-use a handle for HTTP pipelining so it would
+  select it even if already being in use, due to an inadequate check for its
+  chances of being used for pipelnining.
+
 Daniel Fandrich (17 Nov 2008)
 - Added more compiler warning options for gcc 4.3
 
index 9ecd2f97582fc258f7f655d5aafaf2ee6067cc66..4318a8b62ae1fa6a2becf0961f2d444c2e426180 100644 (file)
@@ -17,6 +17,8 @@ This release includes the following bugfixes:
  o fixed several calls to memory functions that didn't check return codes
  o memory leak for SSL connects with libcurl/NSS when CURLOPT_ISSUERCERT was
    used
+ o re-use of connections with the multi interface when multiple handles used
+   the same server
 
 This release includes the following known bugs:
 
@@ -29,6 +31,7 @@ Other curl-related news:
 This release would not have looked like this without help, code, reports and
 advice from friends like these:
 
- Yang Tse, Daniel Fandrich, Jim Meyering, Christian Krause
+ Yang Tse, Daniel Fandrich, Jim Meyering, Christian Krause, Andreas Wurf,
+ Markus Koetter
 
         Thanks! (and sorry if I forgot to mention someone)
index 75f9e099d467496731fef690619e85cdde3a27dc..6bb3e3ee711d00ce3e17d5c2e3b7101412d998c4 100644 (file)
--- a/lib/url.c
+++ b/lib/url.c
@@ -2509,6 +2509,11 @@ ConnectionExists(struct SessionHandle *data,
       /* don't do mixed proxy and non-proxy connections */
       continue;
 
+    if(!canPipeline && check->inuse)
+      /* this request can't be pipelined but the checked connection is already
+         in use so we skip it */
+      continue;
+
     if(!needle->bits.httpproxy || needle->protocol&PROT_SSL ||
        (needle->bits.httpproxy && check->bits.httpproxy &&
         needle->bits.tunnel_proxy && check->bits.tunnel_proxy &&