Commit 3ce43764 authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

Matt Witherspoon fixed a problem case when the CPU load went to 100% when a

HTTP upload was disconnected:

"What appears to be happening is that my system (Linux 2.6.17 and 2.6.13) is
setting *only* POLLHUP on poll() when the conditions in my previous mail
occur. As you can see, select.c:Curl_select() does not check for POLLHUP. So
basically what was happening, is poll() was returning immediately (with
POLLHUP set), but when Curl_select() looked at the bits, neither POLLERR or
POLLOUT was set. This still caused Curl_readwrite() to be called, which
quickly returned. Then the transfer() loop kept continuing at full speed
forever."
parent b555c60e
Loading
Loading
Loading
Loading
+13 −0
Original line number Original line Diff line number Diff line
@@ -6,6 +6,19 @@


                                  Changelog
                                  Changelog


Daniel (5 December 2006)
- Matt Witherspoon fixed a problem case when the CPU load went to 100% when a
  HTTP upload was disconnected:

  "What appears to be happening is that my system (Linux 2.6.17 and 2.6.13) is
  setting *only* POLLHUP on poll() when the conditions in my previous mail
  occur. As you can see, select.c:Curl_select() does not check for POLLHUP. So
  basically what was happening, is poll() was returning immediately (with
  POLLHUP set), but when Curl_select() looked at the bits, neither POLLERR or
  POLLOUT was set. This still caused Curl_readwrite() to be called, which
  quickly returned. Then the transfer() loop kept continuing at full speed
  forever."

Daniel (1 December 2006)
Daniel (1 December 2006)
- Toon Verwaest reported that there are servers that send the Content-Range:
- Toon Verwaest reported that there are servers that send the Content-Range:
  header in a third, not suppported by libcurl, format and we agreed that we
  header in a third, not suppported by libcurl, format and we agreed that we
+3 −1
Original line number Original line Diff line number Diff line
@@ -26,6 +26,7 @@ This release includes the following bugfixes:
 o HTTP responses on persistent connections without Content-Length nor chunked
 o HTTP responses on persistent connections without Content-Length nor chunked
   encoding are now considered to be without response body
   encoding are now considered to be without response body
 o Content-Range: header parsing improved
 o Content-Range: header parsing improved
 o CPU 100% load when upload connection broke


Other curl-related news:
Other curl-related news:


@@ -42,6 +43,7 @@ This release would not have looked like this without help, code, reports and
advice from friends like these:
advice from friends like these:


 James Housley, Olaf Stueben, Yang Tse, Gisle Vanem, Bradford Bruce,
 James Housley, Olaf Stueben, Yang Tse, Gisle Vanem, Bradford Bruce,
 Ciprian Badescu, Dmitriy Sergeyev, Nir Soffer, Venkat Akella, Toon Verwaest
 Ciprian Badescu, Dmitriy Sergeyev, Nir Soffer, Venkat Akella, Toon Verwaest,
 Matt Witherspoon


        Thanks! (and sorry if I forgot to mention someone)
        Thanks! (and sorry if I forgot to mention someone)
+1 −1
Original line number Original line Diff line number Diff line
@@ -124,7 +124,7 @@ int Curl_select(curl_socket_t readfd, curl_socket_t writefd, int timeout_ms)
  if (writefd != CURL_SOCKET_BAD) {
  if (writefd != CURL_SOCKET_BAD) {
    if (pfd[num].revents & POLLOUT)
    if (pfd[num].revents & POLLOUT)
      ret |= CSELECT_OUT;
      ret |= CSELECT_OUT;
    if (pfd[num].revents & POLLERR)
    if (pfd[num].revents & (POLLERR|POLLHUP))
      ret |= CSELECT_ERR;
      ret |= CSELECT_ERR;
  }
  }