]> granicus.if.org Git - php/commitdiff
MFB: Fixed bug #47477 (php_curl_stream_read() unnecessarily sleeps 15 secs
authorIlia Alshanetsky <iliaa@php.net>
Mon, 23 Feb 2009 15:58:41 +0000 (15:58 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Mon, 23 Feb 2009 15:58:41 +0000 (15:58 +0000)
under heavy load)

ext/curl/streams.c

index ca2b08ae1dd7fe21594ea8d10534ec3d1a06196f..bc713b92397c8e88b520a9054cdd089b522edea6 100644 (file)
@@ -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);
 
        }