From: Ilia Alshanetsky Date: Mon, 23 Feb 2009 15:58:19 +0000 (+0000) Subject: Fixed bug #47477 (php_curl_stream_read() unnecessarily sleeps 15 secs under X-Git-Tag: RELEASE_1_3_5~72 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e85ec7c86465f2e7a3ba81c1c0834a8dda85f4a8;p=php Fixed bug #47477 (php_curl_stream_read() unnecessarily sleeps 15 secs under heavy load) # Patch by giuseppe bonacci --- 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); }