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

# Patch by giuseppe bonacci

ext/curl/streams.c

index 1bb427cc9e2212592525a765787ba57826dd7da2..4e1c0dccbab4188ff889f5b4f2bd7de104bd6e9e 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);
 
        }