]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
- Emil Romanus fixed:
authorDaniel Stenberg <daniel@haxx.se>
Sat, 10 Jan 2009 22:10:57 +0000 (22:10 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Sat, 10 Jan 2009 22:10:57 +0000 (22:10 +0000)
  When using the multi interface over HTTP and the server returns a Location
  header, the running easy handle will get stuck in the CURLM_STATE_PERFORM
  state, leaving the external event loop stuck waiting for data from the
  ingoing socket (when using the curl_multi_socket_action stuff). While this
  bug was pretty hard to find, it seems to require only a one-line fix. The
  break statement on line 1374 in multi.c caused the function to skip the call
  to multistate().

  How to reproduce this bug? Well, that's another question.  evhiperfifo.c in
  the examples directory chokes on this bug only _sometimes_, probably
  depending on how fast the URLs are added. One way of testing the bug out is
  writing to hiper.fifo from more than one source at the same time.

CHANGES
RELEASE-NOTES
lib/multi.c

diff --git a/CHANGES b/CHANGES
index b92b229fb57b91a79ba1009f12c38f9c01e270e6..46335ee6ff4b3da780c7c95af86bd164ac8ab375 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -7,11 +7,27 @@
                                   Changelog
 
 
+Daniel Stenberg (10 Jan 2009)
+- Emil Romanus fixed:
+
+  When using the multi interface over HTTP and the server returns a Location
+  header, the running easy handle will get stuck in the CURLM_STATE_PERFORM
+  state, leaving the external event loop stuck waiting for data from the
+  ingoing socket (when using the curl_multi_socket_action stuff). While this
+  bug was pretty hard to find, it seems to require only a one-line fix. The
+  break statement on line 1374 in multi.c caused the function to skip the call
+  to multistate().
+
+  How to reproduce this bug? Well, that's another question.  evhiperfifo.c in
+  the examples directory chokes on this bug only _sometimes_, probably
+  depending on how fast the URLs are added. One way of testing the bug out is
+  writing to hiper.fifo from more than one source at the same time.
+
 Daniel Fandrich (7 Jan 2009)
 - Unified much of the SessionHandle initialization done in Curl_open() and
-  curl_easy_reset() by creating Curl_init_userdefined(). This had the side effect
-  of fixing curl_easy_reset() so it now also resets CURLOPT_FTP_FILEMETHOD and
-  CURLOPT_SSL_SESSIONID_CACHE
+  curl_easy_reset() by creating Curl_init_userdefined(). This had the side
+  effect of fixing curl_easy_reset() so it now also resets
+  CURLOPT_FTP_FILEMETHOD and CURLOPT_SSL_SESSIONID_CACHE
 
 Daniel Stenberg (7 Jan 2009)
 - Rob Crittenden did once again provide an NSS update:
index aefebf4d21855620e80bf32324b9f2e671fd3c89..88daf1753a9d90603d0d6f7612666645c395a60b 100644 (file)
@@ -42,6 +42,7 @@ This release includes the following bugfixes:
  o TTL "leak" in the DNS cache
  o improved NSS initing
  o curl_easy_reset now resets more options
+ o rare Location: follow bug with the multi interface
 
 This release includes the following known bugs:
 
@@ -53,6 +54,7 @@ advice from friends like these:
  Yang Tse, Daniel Fandrich, Jim Meyering, Christian Krause, Andreas Wurf,
  Markus Koetter, Josef Wolf, Vlad Grachov, Pawel Kierski, Igor Novoseltsev,
  Fred Machado, Ken Hirsch, Keshav Krity, Patrick Monnerat, Mark Karpeles,
- Anthony Bryan, Peter Korsgaard, Phil Lisiecki, Bas Mevissen, Rob Crittenden
+ Anthony Bryan, Peter Korsgaard, Phil Lisiecki, Bas Mevissen, Rob Crittenden,
+ Emil Romanus
 
         Thanks! (and sorry if I forgot to mention someone)
index 7c5852ab3d5eb4f4ad50e23daa94f2806c9aa356..d5ddc08739eb578d4365706da0e382a291bfdf4d 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2009, 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
@@ -1371,7 +1371,6 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
             easy->result = Curl_follow(easy->easy_handle, newurl, FOLLOW_FAKE);
             if (easy->result)
               free(newurl);
-            break;
           }
 
           multistate(easy, CURLM_STATE_DONE);