summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlia Alshanetsky <iliaa@php.net>2009-02-23 15:58:19 +0000
committerIlia Alshanetsky <iliaa@php.net>2009-02-23 15:58:19 +0000
commite85ec7c86465f2e7a3ba81c1c0834a8dda85f4a8 (patch)
tree44b5c99965c6b3d844065db59c02dc96d3cc3719
parent551a2d52e2eda3c0e2ccea3c1b282c7338c50d33 (diff)
downloadphp-git-e85ec7c86465f2e7a3ba81c1c0834a8dda85f4a8.tar.gz
Fixed bug #47477 (php_curl_stream_read() unnecessarily sleeps 15 secs under
heavy load) # Patch by giuseppe bonacci
-rw-r--r--ext/curl/streams.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/ext/curl/streams.c b/ext/curl/streams.c
index 1bb427cc9e..4e1c0dccba 100644
--- a/ext/curl/streams.c
+++ b/ext/curl/streams.c
@@ -169,7 +169,8 @@ static size_t php_curl_stream_read(php_stream *stream, char *buf, size_t count T
tv.tv_sec = 15; /* TODO: allow this to be configured from the script */
/* wait for data */
- switch (select(curlstream->maxfd + 1, &curlstream->readfds, &curlstream->writefds, &curlstream->excfds, &tv)) {
+ switch ((curlstream->maxfd < 0) ? 1 :
+ select(curlstream->maxfd + 1, &curlstream->readfds, &curlstream->writefds, &curlstream->excfds, &tv)) {
case -1:
/* error */
return 0;
@@ -182,7 +183,8 @@ static size_t php_curl_stream_read(php_stream *stream, char *buf, size_t count T
curlstream->mcode = curl_multi_perform(curlstream->multi, &curlstream->pending);
} while (curlstream->mcode == CURLM_CALL_MULTI_PERFORM);
}
- } while (curlstream->readbuffer.readpos >= curlstream->readbuffer.writepos && curlstream->pending > 0);
+ } while (curlstream->maxfd >= 0 &&
+ curlstream->readbuffer.readpos >= curlstream->readbuffer.writepos && curlstream->pending > 0);
}