]> git.pld-linux.org Git - packages/curl.git/blob - libcurl.fb-changes.diff
- up to 7.21.3
[packages/curl.git] / libcurl.fb-changes.diff
1 Index: include/curl/multi.h
2 ===================================================================
3 RCS file: /cvsroot/curl/curl/include/curl/multi.h,v
4 retrieving revision 1.45
5 diff -u -r1.45 multi.h
6 --- include/curl/multi.h        20 May 2008 10:21:50 -0000      1.45
7 +++ include/curl/multi.h        29 Jan 2010 23:45:18 -0000
8 @@ -135,6 +135,19 @@
9                                         int *max_fd);
10  
11   /*
12 +  * Name:    curl_multi_select()
13 +  *
14 +  * Desc:    Calls select() or poll() internally so app can call
15 +  *          curl_multi_perform() as soon as one of them is ready. This is to
16 +  *          fix FD_SETSIZE problem curl_multi_fdset() has.
17 +  *
18 +  * Returns: CURLMcode type, general multi error code.
19 +  */
20 +CURL_EXTERN CURLMcode curl_multi_select(CURLM *multi_handle,
21 +                                        int timeout_ms,
22 +                                        int *ret);
23 +
24 + /*
25    * Name:    curl_multi_perform()
26    *
27    * Desc:    When the app thinks there's data available for curl it calls this
28 Index: lib/multi.c
29 ===================================================================
30 RCS file: /cvsroot/curl/curl/lib/multi.c,v
31 retrieving revision 1.210
32 diff -u -r1.210 multi.c
33 --- lib/multi.c 28 Jan 2010 15:34:18 -0000      1.210
34 +++ lib/multi.c 29 Jan 2010 23:45:19 -0000
35 @@ -42,6 +42,7 @@
36  #include "sendf.h"
37  #include "timeval.h"
38  #include "http.h"
39 +#include "select.h"
40  
41  #define _MPRINTF_REPLACE /* use our functions only */
42  #include <curl/mprintf.h>
43 @@ -900,6 +901,80 @@
44    return CURLM_OK;
45  }
46  
47 +CURLMcode curl_multi_select(CURLM *multi_handle, int timeout_ms, int *ret) {
48 +  struct Curl_multi *multi=(struct Curl_multi *)multi_handle;
49 +  struct Curl_one_easy *easy;
50 +  curl_socket_t sockbunch[MAX_SOCKSPEREASYHANDLE];
51 +  int bitmap;
52 +  int i;
53 +  unsigned int nfds = 0;
54 +  struct pollfd *ufds;
55 +  int nret = -1;
56 +
57 +  if(!GOOD_MULTI_HANDLE(multi))
58 +    return CURLM_BAD_HANDLE;
59 +
60 +  easy=multi->easy.next;
61 +  while(easy != &multi->easy) {
62 +    bitmap = multi_getsock(easy, sockbunch, MAX_SOCKSPEREASYHANDLE);
63 +
64 +    for(i=0; i< MAX_SOCKSPEREASYHANDLE; i++) {
65 +      curl_socket_t s = CURL_SOCKET_BAD;
66 +
67 +      if(bitmap & GETSOCK_READSOCK(i)) {
68 +        ++nfds;
69 +        s = sockbunch[i];
70 +      }
71 +      if(bitmap & GETSOCK_WRITESOCK(i)) {
72 +        ++nfds;
73 +        s = sockbunch[i];
74 +      }
75 +      if(s == CURL_SOCKET_BAD) {
76 +        break;
77 +      }
78 +    }
79 +
80 +    easy = easy->next; /* check next handle */
81 +  }
82 +
83 +  ufds = (struct pollfd *)malloc(nfds * sizeof(struct pollfd));
84 +  nfds = 0;
85 +
86 +  easy=multi->easy.next;
87 +  while(easy != &multi->easy) {
88 +    bitmap = multi_getsock(easy, sockbunch, MAX_SOCKSPEREASYHANDLE);
89 +
90 +    for(i=0; i< MAX_SOCKSPEREASYHANDLE; i++) {
91 +      curl_socket_t s = CURL_SOCKET_BAD;
92 +
93 +      if(bitmap & GETSOCK_READSOCK(i)) {
94 +        ufds[nfds].fd = sockbunch[i];
95 +        ufds[nfds].events = POLLIN;
96 +        ++nfds;
97 +        s = sockbunch[i];
98 +      }
99 +      if(bitmap & GETSOCK_WRITESOCK(i)) {
100 +        ufds[nfds].fd = sockbunch[i];
101 +        ufds[nfds].events = POLLOUT;
102 +        ++nfds;
103 +        s = sockbunch[i];
104 +      }
105 +      if(s == CURL_SOCKET_BAD) {
106 +        break;
107 +      }
108 +    }
109 +
110 +    easy = easy->next; /* check next handle */
111 +  }
112 +
113 +  nret = Curl_poll(ufds, nfds, timeout_ms);
114 +  free(ufds);
115 +  if (ret) {
116 +    *ret = nret;
117 +  }
118 +  return CURLM_OK;
119 +}
120 +
121  static CURLMcode multi_runsingle(struct Curl_multi *multi,
122                                   struct Curl_one_easy *easy)
123  {
This page took 0.097139 seconds and 4 git commands to generate.