[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v3 03/10] curl: change curl_multi_do to curl_fd_hand
From: |
Fam Zheng |
Subject: |
[Qemu-devel] [PATCH v3 03/10] curl: change curl_multi_do to curl_fd_handler |
Date: |
Mon, 20 May 2013 15:03:37 +0800 |
The driver calls curl_multi_do to take action at several points, while
it's also registered as socket fd handler. This patch removes internal
call of curl_multi_do because they are not necessary when handler can be
called by socket data update.
Since curl_multi_do becomes a pure fd handler, the function is renamed.
It takes a pointer to CURLSockInfo now, instead of pointer to
BDRVCURLState.
Signed-off-by: Fam Zheng <address@hidden>
---
block/curl.c | 28 +++++++++++++++++-----------
1 file changed, 17 insertions(+), 11 deletions(-)
diff --git a/block/curl.c b/block/curl.c
index 901deb2..dea325e 100644
--- a/block/curl.c
+++ b/block/curl.c
@@ -92,7 +92,7 @@ typedef struct BDRVCURLState {
} BDRVCURLState;
static void curl_clean_state(CURLState *s);
-static void curl_multi_do(void *arg);
+static void curl_fd_handler(void *arg);
static int curl_aio_flush(void *opaque);
static int curl_sock_cb(CURL *curl, curl_socket_t fd, int action,
@@ -110,17 +110,23 @@ static int curl_sock_cb(CURL *curl, curl_socket_t fd, int
action,
}
switch (action) {
case CURL_POLL_IN:
- qemu_aio_set_fd_handler(fd, curl_multi_do, NULL, curl_aio_flush,
s);
+ qemu_aio_set_fd_handler(fd, curl_fd_handler, NULL,
+ curl_aio_flush, sock);
+ sock->action |= CURL_CSELECT_IN;
break;
case CURL_POLL_OUT:
- qemu_aio_set_fd_handler(fd, NULL, curl_multi_do, curl_aio_flush,
s);
+ qemu_aio_set_fd_handler(fd, NULL, curl_fd_handler, curl_aio_flush,
+ sock);
+ sock->action |= CURL_CSELECT_OUT;
break;
case CURL_POLL_INOUT:
- qemu_aio_set_fd_handler(fd, curl_multi_do, curl_multi_do,
- curl_aio_flush, s);
+ qemu_aio_set_fd_handler(fd, curl_fd_handler, curl_fd_handler,
+ curl_aio_flush, sock);
+ sock->action |= CURL_CSELECT_IN | CURL_CSELECT_OUT;
break;
case CURL_POLL_REMOVE:
qemu_aio_set_fd_handler(fd, NULL, NULL, NULL, NULL);
+ sock->action = 0;
break;
}
@@ -226,9 +232,10 @@ static int curl_find_buf(BDRVCURLState *s, size_t start,
size_t len,
return FIND_RET_NONE;
}
-static void curl_multi_do(void *arg)
+static void curl_fd_handler(void *arg)
{
- BDRVCURLState *s = (BDRVCURLState *)arg;
+ CURLSockInfo *sock = (CURLSockInfo *)arg;
+ BDRVCURLState *s = sock->s;
int running;
int r;
int msgs_in_queue;
@@ -237,7 +244,9 @@ static void curl_multi_do(void *arg)
return;
do {
- r = curl_multi_socket_all(s->multi, &running);
+ r = curl_multi_socket_action(s->multi,
+ sock->fd, sock->action,
+ &running);
} while(r == CURLM_CALL_MULTI_PERFORM);
/* Try to find done transfers, so we can free the easy
@@ -302,7 +311,6 @@ static CURLState *curl_init_state(BDRVCURLState *s)
}
if (!state) {
g_usleep(100);
- curl_multi_do(s);
}
} while(!state);
@@ -481,7 +489,6 @@ static int curl_open(BlockDriverState *bs, QDict *options,
int flags)
s->multi = curl_multi_init();
curl_multi_setopt(s->multi, CURLMOPT_SOCKETDATA, s);
curl_multi_setopt(s->multi, CURLMOPT_SOCKETFUNCTION, curl_sock_cb);
- curl_multi_do(s);
qemu_opts_del(opts);
return 0;
@@ -573,7 +580,6 @@ static void curl_readv_bh_cb(void *p)
curl_easy_setopt(state->curl, CURLOPT_RANGE, state->range);
curl_multi_add_handle(s->multi, state->curl);
- curl_multi_do(s);
}
--
1.8.1.4
- [Qemu-devel] [PATCH v3 00/10] curl: fix curl read, Fam Zheng, 2013/05/20
- [Qemu-devel] [PATCH v3 01/10] curl: introduce CURLSockInfo to BDRVCURLState., Fam Zheng, 2013/05/20
- [Qemu-devel] [PATCH v3 02/10] curl: change magic number to sizeof, Fam Zheng, 2013/05/20
- [Qemu-devel] [PATCH v3 03/10] curl: change curl_multi_do to curl_fd_handler,
Fam Zheng <=
- [Qemu-devel] [PATCH v3 04/10] curl: fix curl_open, Fam Zheng, 2013/05/20
- [Qemu-devel] [PATCH v3 05/10] curl: add timer to BDRVCURLState, Fam Zheng, 2013/05/20
- [Qemu-devel] [PATCH v3 06/10] curl: introduce CURLDataCache, Fam Zheng, 2013/05/20
- [Qemu-devel] [PATCH v3 07/10] curl: make use of CURLDataCache., Fam Zheng, 2013/05/20
- [Qemu-devel] [PATCH v3 08/10] curl: use list to store CURLState, Fam Zheng, 2013/05/20
- [Qemu-devel] [PATCH v3 09/10] curl: add cache quota., Fam Zheng, 2013/05/20
- [Qemu-devel] [PATCH v3 10/10] curl: introduce ssl_no_cert runtime option., Fam Zheng, 2013/05/20
- Re: [Qemu-devel] [PATCH v3 00/10] curl: fix curl read, Richard W.M. Jones, 2013/05/20