mirror of
https://github.com/curl/curl.git
synced 2025-01-18 14:04:30 +08:00
curl_multi_wait: avoid second loop if nothing to do
... hopefully this will also make clang-analyzer stop warning on potentional NULL dereferences (which were false positives anyway).
This commit is contained in:
parent
64b2d2d77e
commit
136a3a0ee2
11
lib/multi.c
11
lib/multi.c
@ -802,7 +802,8 @@ CURLMcode curl_multi_wait(CURLM *multi_handle,
|
||||
curl_socket_t sockbunch[MAX_SOCKSPEREASYHANDLE];
|
||||
int bitmap;
|
||||
unsigned int i;
|
||||
unsigned int nfds = extra_nfds;
|
||||
unsigned int nfds = 0;
|
||||
unsigned int curlfds;
|
||||
struct pollfd *ufds = NULL;
|
||||
|
||||
if(!GOOD_MULTI_HANDLE(multi))
|
||||
@ -832,6 +833,9 @@ CURLMcode curl_multi_wait(CURLM *multi_handle,
|
||||
easy = easy->next; /* check next handle */
|
||||
}
|
||||
|
||||
curlfds = nfds; /* number of internal file descriptors */
|
||||
nfds += extra_nfds; /* add the externally provided ones */
|
||||
|
||||
if(nfds) {
|
||||
ufds = malloc(nfds * sizeof(struct pollfd));
|
||||
if(!ufds)
|
||||
@ -839,6 +843,10 @@ CURLMcode curl_multi_wait(CURLM *multi_handle,
|
||||
}
|
||||
nfds = 0;
|
||||
|
||||
/* only do the second loop if we found descriptors in the first stage run
|
||||
above */
|
||||
|
||||
if(curlfds) {
|
||||
/* Add the curl handles to our pollfds first */
|
||||
easy=multi->easy.next;
|
||||
while(easy != &multi->easy) {
|
||||
@ -866,6 +874,7 @@ CURLMcode curl_multi_wait(CURLM *multi_handle,
|
||||
|
||||
easy = easy->next; /* check next handle */
|
||||
}
|
||||
}
|
||||
|
||||
/* Add external file descriptions from poll-like struct curl_waitfd */
|
||||
for(i = 0; i < extra_nfds; i++) {
|
||||
|
Loading…
Reference in New Issue
Block a user