- Dengminwen found a bug in the connection re-use function when using the
authorDaniel Stenberg <daniel@haxx.se>
Thu, 19 Jun 2008 08:31:22 +0000 (08:31 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Thu, 19 Jun 2008 08:31:22 +0000 (08:31 +0000)
  multi interface with pipelining enabled as it would wrongly check for,
  detect and close "dead connections" even though that connection was already
  in use!

CHANGES
RELEASE-NOTES
lib/url.c

diff --git a/CHANGES b/CHANGES
index aa69979..1d13757 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -6,6 +6,12 @@
 
                                   Changelog
 
+Daniel Stenberg (19 Jun 2008)
+- Dengminwen found a bug in the connection re-use function when using the
+  multi interface with pipelining enabled as it would wrongly check for,
+  detect and close "dead connections" even though that connection was already
+  in use!
+
 Daniel Fandrich (18 Jun 2008)
 - Added SSH failure test cases 628-632
 
index 50ea7ad..3201397 100644 (file)
@@ -20,6 +20,7 @@ This release includes the following bugfixes:
 
  o Fixed curl-config --ca
  o Fixed the multi interface connection re-use with NSS-built libcurl
+ o connection re-use when using the multi interface with pipelining enabled
 
 This release includes the following known bugs:
 
@@ -37,6 +38,6 @@ This release would not have looked like this without help, code, reports and
 advice from friends like these:
 
  Lenny Rachitsky, Axel Tillequin, Arnaud Ebalard, Yang Tse, Dan Fandrich,
- Rob Crittenden
+ Rob Crittenden, Dengminwen
 
         Thanks! (and sorry if I forgot to mention someone)
index a7f1a0c..6391edb 100644 (file)
--- a/lib/url.c
+++ b/lib/url.c
@@ -2511,9 +2511,10 @@ ConnectionExists(struct SessionHandle *data,
     }
 
     if(match) {
-      if(pipeLen == 0) {
-        /* The check for a dead socket makes sense only if there
-           are no handles in pipeline */
+      if(!pipeLen && !check->inuse) {
+        /* The check for a dead socket makes sense only if there are no
+           handles in pipeline and the connection isn't already marked in
+           use */
         bool dead = SocketIsDead(check->sock[FIRSTSOCKET]);
         if(dead) {
           check->data = data;