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."
This commit is contained in:
Daniel Stenberg 2006-12-05 13:37:05 +00:00
parent b555c60e49
commit 3ce43764be
3 changed files with 17 additions and 2 deletions

13
CHANGES
View File

@ -6,6 +6,19 @@
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)
- 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

View File

@ -26,6 +26,7 @@ This release includes the following bugfixes:
o HTTP responses on persistent connections without Content-Length nor chunked
encoding are now considered to be without response body
o Content-Range: header parsing improved
o CPU 100% load when upload connection broke
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:
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)

View File

@ -124,7 +124,7 @@ int Curl_select(curl_socket_t readfd, curl_socket_t writefd, int timeout_ms)
if (writefd != CURL_SOCKET_BAD) {
if (pfd[num].revents & POLLOUT)
ret |= CSELECT_OUT;
if (pfd[num].revents & POLLERR)
if (pfd[num].revents & (POLLERR|POLLHUP))
ret |= CSELECT_ERR;
}