Refactor the fdset acquisition into the fetchers to stop fetch.c including curl.h

This commit is contained in:
Daniel Silverstone 2016-06-27 21:00:58 +01:00
parent ab6c03f311
commit a468b40990
3 changed files with 38 additions and 9 deletions

View File

@ -39,7 +39,6 @@
#include <strings.h>
#include <time.h>
#include <libwapcaplet/libwapcaplet.h>
#include <curl/curl.h>
#include "utils/config.h"
#include "utils/corestrings.h"
@ -386,8 +385,7 @@ nserror fetcher_fdset(fd_set *read_fd_set,
fd_set *except_fd_set,
int *maxfd_out)
{
CURLMcode code;
int maxfd;
int maxfd = -1;
int fetcherd; /* fetcher index */
if (!fetch_dispatch_jobs()) {
@ -408,12 +406,19 @@ nserror fetcher_fdset(fd_set *read_fd_set,
FD_ZERO(read_fd_set);
FD_ZERO(write_fd_set);
FD_ZERO(except_fd_set);
code = curl_multi_fdset(fetch_curl_multi,
read_fd_set,
write_fd_set,
except_fd_set,
&maxfd);
assert(code == CURLM_OK);
for (fetcherd = 0; fetcherd < MAX_FETCHERS; fetcherd++) {
if ((fetchers[fetcherd].refcount > 0) &&
(fetchers[fetcherd].ops.fdset != NULL)) {
/* fetcher present */
int fetcher_maxfd;
fetcher_maxfd = fetchers[fetcherd].ops.fdset(
fetchers[fetcherd].scheme, read_fd_set,
write_fd_set, except_fd_set);
if (fetcher_maxfd > maxfd)
maxfd = fetcher_maxfd;
}
}
if (maxfd >= 0) {
/* change the scheduled poll to happen is a 1000ms as

View File

@ -90,6 +90,12 @@ struct fetcher_operation_table {
*/
void (*poll)(lwc_string *scheme);
/**
* update an fdset with the FDs needed to poll cleanly
*/
int (*fdset)(lwc_string *scheme, fd_set *read_set, fd_set *write_set,
fd_set *error_set);
/**
* Finalise the fetcher.
*/

View File

@ -1374,6 +1374,23 @@ fetch_curl_header(char *data, size_t size, size_t nmemb, void *_f)
#undef SKIP_ST
}
static int fetch_curl_fdset(lwc_string *scheme, fd_set *read_set,
fd_set *write_set, fd_set *error_set)
{
CURLMcode code;
int maxfd = -1;
code = curl_multi_fdset(fetch_curl_multi,
read_set,
write_set,
error_set,
&maxfd);
assert(code == CURLM_OK);
return maxfd;
}
/* exported function documented in content/fetchers/curl.h */
nserror fetch_curl_register(void)
@ -1390,6 +1407,7 @@ nserror fetch_curl_register(void)
.abort = fetch_curl_abort,
.free = fetch_curl_free,
.poll = fetch_curl_poll,
.fdset = fetch_curl_fdset,
.finalise = fetch_curl_finalise
};