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:
parent
b555c60e49
commit
3ce43764be
13
CHANGES
13
CHANGES
@ -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
|
||||||
|
@ -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)
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user